Método privado simulado usando PowerMockito

Estoy usando PowerMockito para burlarme de la llamada al método privado (privateApi), pero aún así realiza la llamada privateApi, que a su vez genera otra tercera llamada de parte. Me estoy metiendo en un problema cuando thirdPartyCall lanza una excepción. Según tengo entendido, si me estoy burlando de privateApi, no debería entrar en detalles de implementación del método y devolver la respuesta simulada.

public class MyClient {

    public void publicApi() {
        System.out.println("In publicApi");
        int result = 0;
        try {
            result = privateApi("hello", 1);
        } catch (Exception e) {
            Assert.fail();
        }
        System.out.println("result : "+result);
        if (result == 20) {
            throw new RuntimeException("boom");
        }
    }

    private int privateApi(String whatever, int num) throws Exception {
        System.out.println("In privateAPI");
        thirdPartyCall();
        int resp = 10;
        return resp;
    }

    private void thirdPartyCall() throws Exception{
        System.out.println("In thirdPartyCall");
        //Actual WS call which may be down while running the test cases
    }
}

Aquí está el caso de prueba:

@RunWith(PowerMockRunner.class)
@PrepareForTest(MyClient.class)
public class MyclientTest {

    @Test(expected = RuntimeException.class)
    public void testPublicAPI() throws Exception {
        MyClient classUnderTest = PowerMockito.spy(new MyClient());
        PowerMockito.when(classUnderTest, "privateApi", anyString(), anyInt()).thenReturn(20);
        classUnderTest.publicApi();
    }
}

Seguimiento de consola:

In privateAPI
In thirdPartyCall
In publicApi
result : 20

Respuestas a la pregunta(1)

Su respuesta a la pregunta