忽略参数

Ignoring argument

所以我正在尝试测试一种方法 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 时更多),这只会让 class 变得更加混乱。

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

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

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

强烈鼓励后者,尤其是当你处理的是对签名不太宽容的遗留代码库时改变。