PowerMock:模拟静态方法(+在某些特定方法中返回原始值)
我使用PowerMock 1.4.7和JUnit 4.8.2
我只需要模拟一些静态方法,而我想让其他方法(来自同一类)只是返回原始值。当我嘲笑mockStatic并且不调用when().doReturn()所有静态方法时,它们会返回其默认值-
例如,返回Object时为null或返回布尔值时为false …等等。因此,我尝试thenCallRealMethod在每个静态方法上显式使用它
来返回默认实现(意味着没有模拟/没有伪造),但是我不知道如何在每个可能的参数变体上调用它(=我想为每个可能的输入调用原始方法)。我只知道如何模拟具体的参数变化。
回答:
您可以在静态类上使用间谍,并仅模拟特定方法:
@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"));
}
}
以上是 PowerMock:模拟静态方法(+在某些特定方法中返回原始值) 的全部内容, 来源链接: utcz.com/qa/417968.html








