Maquette méthode privée à l'aide de PowerMockito

Je suis en utilisant PowerMockito de se moquer de l'privée de l'appel de méthode (privateApi), mais il fait encore le privateApi d'appel qui, à son tour, fait un autre thirdPartCall. Je suis aller au problème lorsque thirdPartyCall throws exception. Comme je le comprends, si je suis en se moquant de la privateApi, il ne devrait pas entrer dans la méthode de la mise en œuvre du détail et de retour de la simulation de la réponse.

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
    }
}

Ici, c'est le cas de test:

@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();
    }
}

Console de trace:

In privateAPI
In thirdPartyCall
In publicApi
result : 20

OriginalL'auteur Pankaj | 2015-01-24