示例代码:
class MyClass {
public void myMethod(Request request) {
Item item = getItem();
ItemUtilHelper.setCertainProperties(newProperty, item);
differentClass.staticMethod(item);
}
}
ItemUtilHelper
已经有一个单元测试类来验证项目是否已正确更新。
我将如何进行单元测试以使用更新的 item
参数调用 differentClass.staticMethod
?
最佳答案
首先让我说静态方法本身就是一种代码味道。 Miško Hevery summed up it quite nicely by saying:
The basic issue with static methods is they are procedural code. I have no idea how to unit-test procedural code. Unit-testing assumes that I can instantiate a piece of my application in isolation.
如果你只想使用 Mockito,你的问题是无法解决的:
What are the limitations of Mockito
Mockito 2.x specific limitations
...
Cannot mock static methods
...
(参见 Mockito FAQ)
您可以使用 PowerMock实现你的目标。 但要注意:PowerMock 在字节码级别运行。这意味着
- 您可能测试的字节码与您在生产中使用的字节码不完全相同(向 Heisenbugs 问好)和
- 这可以与其他工具结合使用,例如JaCoCo
如果你还想继续,那么你要找的就是 spy 。您可以在 PowerMock's wiki 上找到教程.虽然没有直接关系,但 this question 的答案给出一些关于如何创建一个类的 spy 的额外例子。可以在 Automation Rhapsody 上找到完整的示例.
关于java - 对传递给静态方法的值进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50892214/