当前位置: 首页 > 知识库问答 >
问题:

使用PowerMock模拟返回void的静态方法不起作用

端木骞尧
2023-03-14

我有这门课(简体)

public class ItemParametersParser
{ ...
  public static void writeToFile(Item i,  Context c, Builder b) throws HandlerException
}

我试图模拟writeToFile方法,但没有成功

@RunWith(PowerMockRunner.class)
@PrepareForTest({ItemParametersParser.class})
public class MyTest {

    @Test
    public void test() throws ... {        
        mockStatic(ItemParametersParser.class);
        doNothing().when(ItemParametersParser.class);
        ItemParametersParser.writeXMLToFile(null,null,null);
        ...
    }

这个结果随着去到原来的方法,我也尝试了模拟具体的方法使用:

doNothing().when(ItemParametersParser.writeXMLToFile(any(Item.class),any(Context.class),any(Builder.class)));

编辑:修复导入问题后,正如@pvpkiran所说,现在起作用了!我可以用DoAnswer来验证。

doAnswer(new Answer<Void>() {
    public Void answer(InvocationOnMock invocation) {
      Object[] args = invocation.getArguments();
      System.out.println("called with arguments: " + Arrays.toString(args));
          return null;
    }
}).when(ItemParametersParser.class, "writeToFile", any(Item.class), any(Context.class),any(Builder.class));

共有1个答案

巫马浩言
2023-03-14

这应该行得通

 @Test
  public void test() throws .... {
    mockStatic(ItemParametersParser.class);
    doNothing().when(ItemParametersParser.class, "writeToFile", any(Item.class), any(Context.class),any(Builder.class));
  }

第一个参数是被测试类的类实例,第二个参数是要模拟的方法名,后面是该方法的参数。

确保您导入了org.powermock.api.mockito.powermockito.doNothing而不是org.mockito.mockito.doNothing

 类似资料:
  • 我试图用PowerMock在Mockito上模拟一个静态void方法,但它并不是那么好用。 我的示例代码: EvilBrother.java 我的问题是,嵌套类按照预期的方式使用@PrepareForTest和PowerMockito.MockStatic组合进行了模拟,但是如果类在自己的类文件中,这些语句就不起作用了。 如何修复这个测试? 与 尽管执行了assert.fail,但可以通过Powe

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

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

  • 我遇到了Mockito的一个bug,但我想知道是否有其他人可以解释为什么这个测试不起作用。 基本上,我有两个对象,如下所示: 第一个对象是通过注释和之前的方法模拟的: 在方法中模拟第二个对象: 当包含对此方法的直接调用以设置并获取第二个对象的模拟时,它将失败: 但是,当同一方法返回的模拟被分配给一个局部变量(在中使用)时,它可以工作: 我们是否做错了什么,或者这确实是Mockito中的一个缺陷/限

  • 问题内容: 我使用PowerMock 1.4.7和JUnit 4.8.2 我只需要模拟一些静态方法,而我想让其他方法(来自同一类)只是返回原始值。当我嘲笑并且不调用所有静态方法时,它们会返回其默认值- 例如,返回Object时为null或返回布尔值时为false …等等。因此,我尝试在每个静态方法上显式使用它 来返回默认实现(意味着没有模拟/没有伪造),但是我不知道如何在每个可能的参数变体上调用它

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