【发布时间】:2010-01-12 21:30:14
【问题描述】:
我的开发团队已开始使用Mockito 并拥有已定义为“final”的类。我在 Joshua Bloch 的 Effective Java 和 SO 线程 When to use final 中读到所有类都应该使用 final 修饰符。线程中存在一些分歧,但我同意强制类组合的想法,除非继承有意义。
如果我想使用 Mockito 之类的测试框架来测试类,该框架要求类不具有“final”修饰符,我应该怎么做?我希望其他人在他们的测试中遇到过类似的问题发展。您的开发团队达成了哪些解决方案?
有两个明显的答案,例如使用 JMock 或删除我们要测试的类上的 'final' 修饰符,但我们想坚持使用一个外部测试框架(JUnit 除外),可能很难说服其他开发人员删除“final”修饰符。
谢谢。
【问题讨论】:
-
制作所有的类
final当然不是最佳实践...自从阅读Effective Java以来已经有一段时间了,但是链接线程的共识肯定没有' t 似乎也暗示了这一点。您应该标记类final以表明它们不应该扩展的某些原因 - 如果没有原因,它只会增加不必要的复杂性 - 正如您所发现的。此外,如果您意识到确实需要在某个地方扩展该类,则必须更改原始类的代码以编写新类 - 违反了开放/封闭原则。