我使用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"));
}

}

08-06 15:48