我上同样的课
class MyCalss{
final static SomeClass field = new SomeClass();
...
}
我应该模拟 MyCalss 的实例。这个模拟应该包含像真实对象一样的字段。
我怎样才能实现它?
最佳答案
模拟在方法和接口(interface)上运行,而不是字段;此外,它作用于实例成员,而不是静态成员。 Mockito 和 Powermock 不是解决此问题的正确工具。
虽然你可以use reflection to set final fields ,您正在有效地处理自己的声明,并受到 JLS 17.5.3 的限制和危害。 .
更好的设计是重写被测系统中的方法以注入(inject)它的 SomeClass 依赖:
public void methodUnderTest() {
methodUnderTest(MyClass.field);
}
/** Package-visible for testing. Test this method instead. */
void methodUnderTest(SomeClass someClass) {
someClass.firePhotonTorpedoes();
}
关于unit-testing - 如何模拟最终领域? mockito/powermock,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23629766/