java - 忽略争论

标签 java unit-testing mockito

所以我正在尝试测试一个方法methodUnderTest,如下所示:

methodUnderTest{
    //Other stuff that works nice
    this.setterMethod(OtherClass.methodThatErrors(arg1));
}

所以我试图避免静态方法调用methodThatErrors

到目前为止我在做什么:

ClassUnderTest spy = Mockito.spy(objectOfClassUnderTest);
Mockito.doNothing().when(spy).setterMethod(Mockito.any(OtherClass.class));

但是这不起作用,该方法仍在被调用。我本以为它根本不应该调用参数方法,因为我已经为 setterMethod 的参数编写了 any 。那么如何使用 Mockito 而不是 PowerMockito 来阻止此调用。

编辑:

所以我设法通过像这样移动静态方法调用来模拟它:

methodUnderTest{
    this.extraSetterMethod(arg1);
}

extraSetterMethod(arg1){
    this.setterMethod(OtherClass.methodThatErrors(arg1));
}

我不太喜欢这个解决方案,因为它添加了几行额外的代码(对于 javadoc 甚至更多),这只会使类变得更加困惑。

最佳答案

这里的问题是该值直接来自静态方法,而不是 setter 本身。无论它获得什么值都来自方法本身的实际调用。模拟对 setter 的调用没有任何效果;这不是错误的 setter 的结果。

在这种情况下,您必须做出艰难的决定:

  • 向方法引入一个参数,以便调用可以更容易模拟,或者
  • 使用 PowerMockito 模拟调用。

强烈鼓励后者,特别是当您处理的是对签名更改不太宽容的遗留代码库时。

关于java - 忽略争论,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31196149/

相关文章:

java - Mockito when() 在字段方法上

java - 如何使 JSONObject 忽略 'null' 的特殊含义并将其打印为文字 null

java - 为什么泛型参数 "extends"在派生函数中不允许,但泛型返回类型是?

java - 使用格式将 long 解析为 Date 对象

java - 在 JavaDoc 中包含指向(单元)测试类的链接

java - Mockito - 内部方法调用

javascript - 如何在 Angular 应用程序中将字符串保存到 Cloud Storage 中的文本文件?

c# - Moq - 验证最后一次调用方法

android - 如何在单元测试中读取 Android 资源文件值

unit-testing - 单元测试 SLF4J 日志消息的最佳方法是什么?