我使用PowerMock 1.4.7和JUnit 4.8.2
我只需要模拟一些静态方法,而我想要其他(从
同一类)只是为了返回原始值。
当我用mockStatic
mock 并且不全部调用when().doReturn()
时
静态方法返回其默认值-返回Object时为null
返回 boolean 值等时为false。所以我尝试用thenCallRealMethod
在每个静态方法上显式返回
默认实现(意味着没有 mock /没有伪造品),但我不知道
如何在每个可能的参数变体上调用它(=我想为每个可能的输入调用原始方法)。我只知道如何模拟具体的参数变化。
最佳答案
您可以在静态类上使用 spy ,并仅模拟特定方法:
@RunWith(PowerMockRunner.class)
@PrepareForTest(MyStaticTest.MyStaticClass.class)
public class MyStaticTest {
public static class MyStaticClass {
public static String getA(String a) {
return a;
}
public static String getB(String b) {
return b;
}
}
@Test
public void should_partial_mock_static_class() throws Exception {
//given
PowerMockito.spy(MyStaticClass.class);
given(MyStaticClass.getB(Mockito.anyString())).willReturn("B");
//then
assertEquals("A", MyStaticClass.getA("A"));
assertEquals("B", MyStaticClass.getA("B"));
assertEquals("C", MyStaticClass.getA("C"));
assertEquals("B", MyStaticClass.getB("A"));
assertEquals("B", MyStaticClass.getB("B"));
assertEquals("B", MyStaticClass.getB("C"));
}
}