TDD。我有非常复杂的编码练习,如果它们非常复杂,我会测试私有方法吗?
所以我的类只暴露了一个公共方法,但是包含很少的非常复杂的方法,我认为应该进行测试?
有疑问:我是否测试过它们?
答案 0 :(得分:4)
如果您正在进行TDD,那么在物理上可能无法实现“非常复杂”的私有方法。 TDD的第三阶段是“重构”。当你实现功能时,你不断地分开东西,打破东西,提取方法,类等等,这样你就可以避免以神秘的方式完成10万件神物。
当在遗留代码中处理这些类时(这是一个可以编写整本书(和人们都有)的主题),通常认为做出代码所需的最少量的重构是一种好的做法。所有可测试的(没有诉诸反射和类似丑陋的黑客)。然后用测试覆盖代码,直到你相信你可以开始对它进行修改而不违反合同。
此时你可以开始重构,破解,提取并发疯,直到你有更多可管理的东西。
底线是:否,不要测试私有方法。它使得难以理解的脆弱测试变得简单,它只能用于破坏糟糕的设计,而不是帮助您获得更好的设计(TDD的明确目标之一)。
即使你认为“现在最好快速获得覆盖率,我可以在以后修复它”,不,这不值得。这是一项巨大的技术债务,你将在未来10年内不再回应。这太麻烦了。