忽略参数

时间:2015-07-02 23:18:45

标签: 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));

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

编辑:

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

methodUnderTest{
    this.extraSetterMethod(arg1);
}

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

我真的不喜欢这个解决方案,因为它添加了几行额外的代码(更多的是用javadoc),这只会使类变得更加混乱。

1 个答案:

答案 0 :(得分:1)

这里的问题是值是从静态方法直接,而不是setter本身。无论它获得什么价值,都来自方法本身的真实调用。嘲笑对二传手的召唤没有效果;这不是设置者出错的结果。

这是一个必须做出艰难决定的情景:

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

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