Unit testing 将私有方法更改为单元测试的受保护或包私有-好还是坏?
我正在研究TDD,最近正在寻找如何正确地对私有方法进行单元测试。堆栈溢出中流行的答案是:Unit testing 将私有方法更改为单元测试的受保护或包私有-好还是坏?,unit-testing,tdd,Unit Testing,Tdd,我正在研究TDD,最近正在寻找如何正确地对私有方法进行单元测试。堆栈溢出中流行的答案是: 使用反射使私有方法可以从外部访问 不要测试私有方法。(请改用公共方法。) 根据评论部分的不同意见,似乎每个人都有自己的规则。然后我发现这表明了一个相当大胆的方法 使私有方法受保护或包私有。将测试代码放在同一个包中。 为可测试性而设计意味着设计代码以使其更易于测试。要做到这一点,你可能必须打破我们在大学里学到的一些原则,比如封装 尽管TDD的原则是为可测试性设计代码,但破坏封装对我来说并不合适。这种
- 使用反射使私有方法可以从外部访问李>
- 不要测试私有方法。(请改用公共方法。)
- 使
方法私有
或受保护
。将测试代码放在同一个包中。 为可测试性而设计意味着设计代码以使其更易于测试。要做到这一点,你可能必须打破我们在大学里学到的一些原则,比如封装包私有
尽管TDD的原则是为可测试性设计代码,但破坏封装对我来说并不合适。这种方法是一种好方法吗?如果您同意将Guava库添加为依赖项,那么可以将方法
包设置为私有的
,并用注释标记它
我假设您使用的是Java,尽管您没有明确说明这一点。我认为正确的答案是:不要测试私有方法。 如果您觉得需要测试私有方法,可能会出现以下两种情况之一:
- 该方法不必是私有的:也许可以通过它所在的对象的API访问该方法。在这种情况下,将其更改为public(或其他非private)。另一种选择是将方法的行为放在另一个对象的公共方法中,并为其构建一些专用测试李>
- 方法必须是私有的,因此您正在测试一些不应该测试的东西。您正试图编写与正在测试的对象耦合太多的测试。根据定义,私有方法是不稳定的,它们可以在一段时间内频繁更改。这些更改将破坏直接验证私有方法的每个测试