我正在为类似于下面给出的样本的方法编写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();
}
现在我想验证是否调用类Sample B的静态methodC()。如何使用PowerMockito 1.6实现?我尝试了很多东西,但它似乎并不适合我。任何帮助表示赞赏。
答案 0 :(得分:26)
就个人而言,我必须说PowerMock等是解决问题的方法,如果您的代码不是很糟糕,那么您不应该这样做。在某些情况下,它是必需的,因为框架等使用静态方法导致代码无法以其他方式进行测试,但如果它与您的代码有关,则应该总是更喜欢重构而不是静态模拟。
无论如何,在PowerMockito中验证不应该那么难......
PowerMockito.verifyStatic( Mockito.times(1)); // Verify that the following mock method was called exactly 1 time
SampleB.methodC();
(当然,为了实现这一点,您必须将SampleB添加到@PrepareForTest
注释中并为其调用mockStatic
。)