我正在研究 TDD,最近正在寻找如何正确地对私有(private)方法进行单元测试。 Stack Overflow 中的热门答案建议:
根据评论区的分歧,似乎每个人都有自己的规则。然后我找到了这个 tutorial site这表明一种相当大胆的方法。
- 使
私有(private)
方法protected
或包私有(private)
。将测试代码放在同一个包中。Designing for testability means designing your code so that it is easier to test. To do so, you may have to break with some of the principles we learned in university, like encapsulation.
尽管 TDD 的原则是为可测试性设计代码,但为此打破封装对我来说并不合适。这种方法是好的做法吗?
最佳答案
我认为正确的答案是:不要测试私有(private)方法。 如果您觉得需要测试私有(private)方法,可能会出现以下两种情况之一:
- 该方法不必是私有(private)的:也许可以通过其所在对象的 API 访问该方法。在这种情况下,将其更改为公开(或任何其他非私有(private))。另一种选择是将方法的行为放在另一个对象的公共(public)方法中,并为其构建一些专用测试;
- 该方法必须是私有(private)的,因此您正在测试不应该进行的测试。您正在尝试编写与您正在测试的对象过于耦合的测试。根据定义,私有(private)方法并不稳定,它们会随着时间的推移而频繁变化。这些更改将破坏所有直接验证私有(private)方法的测试。
关于unit-testing - 将私有(private)方法更改为 protected 或包私有(private)以进行单元测试 - 好还是坏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40582252/