Проверка статического вызова метода с помощью PowerMockito 1.6
Я пишу тестовый пример JUnit для методов, похожих на приведенный ниже пример:
Class SampleA{
public static void methodA(){
boolean isSuccessful = methodB();
if(isSuccessful){
SampleB.methodC();
}
}
public static boolean methodB(){
//some logic
return true;
}
}
Class SampleB{
public static void methodC(){
return;
}
}
Я написал следующий тестовый пример в моем тестовом классе:
@Test
public void testMethodA_1(){
PowerMockito.mockStatic(SampleA.class,SampleB.class);
PowerMockito.when(SampleA.methodB()).thenReturn(true);
PowerMockito.doNothing().when(SampleB.class,"methodC");
PowerMockito.doCallRealMethod().when(SampleA.class,"methodA");
SampleA.methodA();
}
Теперь я хочу проверить, вызывается ли static methodC() класса Sample B или нет. Как я могу добиться с помощью PowerMockito 1.6? Я перепробовал много вещей, но, похоже, у меня ничего не вышло. Любая помощь приветствуется.
1 ответ
Лично я должен сказать, что PowerMock и т. Д. - это решение проблемы, которой у вас не должно быть, если ваш код не плохой. В некоторых случаях это требуется, потому что фреймворки и т. Д. Используют статические методы, которые приводят к коду, который просто не может быть протестирован иначе, но если речь идет о ВАШЕМ коде, вы всегда должны предпочитать рефакторинг вместо статического макета.
Во всяком случае, проверить, что в PowerMockito не должно быть так сложно...
PowerMockito.verifyStatic( Mockito.times(1)); // Verify that the following mock method was called exactly 1 time
SampleB.methodC();
(Конечно, чтобы это работало, вы должны добавить SampleB к @PrepareForTest
аннотация и вызов mockStatic
для этого.)