当前位置: 首页 > 面试题库 >

PowerMock:模拟静态方法(+在某些特定方法中返回原始值)

拓拔松
2023-03-14
问题内容

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

}


 类似资料:
  • 我正在尝试使用JUnit、Mockito和PowerMock验证对的调用。 下面是我的测试用例: 下面是测试中的代码: 非常有趣的是,这段代码失败时出现:

  • Powermock为什么不模拟静态方法调用,而是在然后()语句中调用初始方法? 在这种情况下,我有一系列方法调用: TestClass方法-调用- Class4方法尝试查找上下文中不存在且挂起的对象,因此我尝试使用Powermock模拟公共静态Class3方法。 所有的类和方法都是非最终的。我使用TestNg。我的测试方法有一个@准备测试我尝试了以下方法来模拟方法调用: 或而不是当-然后返回: 或

  • 我有这门课(简体) 我试图模拟writeToFile方法,但没有成功 这个结果随着去到原来的方法,我也尝试了模拟具体的方法使用: 编辑:修复导入问题后,正如@pvpkiran所说,现在起作用了!我可以用DoAnswer来验证。

  • 我的测试用例是: 当我调用时,实际上不会调用此方法。如何在side中模拟方法的结果?

  • 我正在尝试使用EasyMock+PowerMock模拟静态方法。如果我没有模拟静态方法,那么我会得到异常java.lang.ExceptioninInitializerError,但它有一个不同的堆栈跟踪,这完全是由于我的代码文件造成的,错误是显而易见的。但是,如果我使用EasyMock+PowerMock模拟静态方法,则行PowerMock.MockStaticNice(ClassName.Cl

  • 我编写了以下代码来模拟一个名为ValidatorUtil的类,该类在测试中用于验证字符串,所以我编写了ValidatorUtil应该总是返回true,但它总是返回false,最终实际上调用了ValidatorUtil的isValid方法,该方法将结果返回为false。我已经尝试过所有的匹配器,比如mockito.any()和mockito.any(configurator.class)但是没有成功