unit-testing - 如何模拟最终领域? mockito/powermock

标签 unit-testing testing junit mockito powermock

我上同样的课

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/

相关文章:

ios - 这个单元测试我做错了什么?

rest - soapui 或 soapui pro 中的 DataGen?

ruby-on-rails-3 - 在测试环境中设置 default_url_options 似乎不起作用

java - 带有模式的 Spring MockMvc redirectedUrl

reactjs - React - Jest - 测试 preventDefault Action

python - 如何在单元测试中使用 assert_frame_equal

angularjs - 错误 : [$injector:unpr] Unknown provider: $scopeProvider <- $scope Error

ios - swift 2.2 和 xcode 7.3 中的模拟和文档

java - @Before 和 @After 排除

java - 尝试将生成的输入流与资源文件进行比较 - jUnit