【发布时间】:2017-11-22 02:04:44
【问题描述】:
Mocking ScheduledExecutorService 确实会使测试我的类更容易,但根据 mockito recommendations 这似乎是个坏主意,因为模拟类的逻辑可能会以一种不正确的方式使用而改变,但是单元测试仍然会报告成功。
似乎为它编写一个包装器将是一种“干净”的方式,但我有一种感觉,这只会导致接口的完全重复,这只会让我的代码不那么简单。我想遵循this answer 的实用建议,但我不确定ScheduledExecutorService 的合同是否会一直保持不变。
我可以假设ScheduledExecutorService(或更一般地说,JRE 库中的任何其他类)的现有方法的合同永远不会改变吗?如果没有,如果我在集成测试中测试它的正确使用,同时在单元测试中直接模拟它就足够了吗?
【问题讨论】:
-
ScheduledExecutorService 是一个接口 - 所以它就是一个契约,你可以假设它在 JDK 中的各种实现都遵循契约。
-
谢谢!但是我可以确定后续Java版本中的接口会指定相同的合同吗?仅出于示例的目的,假设将添加一个新方法,该方法应在任何调度调用之前调用。然后我的单元测试不会通知我这个变化,但整个软件将无法正常工作。还是我应该始终坚持使用一个版本的 JDK/JRE 并在升级时彻底检查所有内容?
-
较新的 JDK 版本大多向后兼容,并且在发行说明中清楚地指出了重大更改(通常是错误修复)。如果您对此感到不舒服,您可以进行 1 个测试来检查 SES 实现是否按预期(单元或集成)工作并完成。
标签: java unit-testing mocking mockito