所以我正在尝试测试一个方法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/