gpt4 book ai didi

java - 忽略争论

转载 作者:行者123 更新时间:2023-12-01 11:21:19 24 4
gpt4 key购买 nike

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com