我正在尝试为静态方法添加测试类:
class SomeClass {
public static int getLoginPage() {
if (otherStaticMethod()) {
return Screen.FOO;
}
return Screen.BAR;
}
}
请注意,FOO和BAR的值不同为零。
我的测试班:
@RunWith(PowerMockRunner.class)
@PrepareForTest({SomeClass.class})
public class SomeClass_getLoginPage {
@Test
public void testgetLoginPage() {
PowerMockito.mockStatic(SomeClass.class);
Mockito.when(SomeClass.otherStaticMethod()).thenReturn(true);
assertTrue(SomeClass.getLoginPage() == Screen.FOO);
Mockito.when(SomeClass.otherStaticMethod()).thenReturn(false);
assertTrue(SomeClass.getLoginPage() == Screen.BAR);
}
}
但是,当调用方法otherStaticMethod
时,方法getLoginPage
会返回0
,其中应返回FOO
或BAR
。我该如何解决这个问题?
答案 0 :(得分:1)
只需使用重载的spy
方法,而不是实际模拟整个类。
PowerMockito.spy(SomeClass.class);
现在默认情况下,所有静态方法都将使用实际实现运行,直到您实际模拟其中一个。
你得到0
的原因是因为mockStatic
你模拟了所有静态方法,并且默认情况下调用int
返回方法会导致该值(如果没有明确的话)另有规定)。