测试驱动开发。我有相当复杂的编码练习,如果私有方法非常复杂,我是否要测试它们?

TDD. I have quite complex coding exercise, do I test private methods if they are very complex?

测试驱动开发。我有相当复杂的编码练习,如果私有方法非常复杂,我会测试它们吗?

所以我的 class 只暴露了一个 public 方法,但包含了几个非常复杂的方法,我认为应该测试一下?

有疑问:我测试还是不测试?

如果您正在执行 TDD,那么实际上不可能达到您拥有 "very complex" 私有方法的地步。 TDD的第三阶段是"refactor"。当你实现功能时,你不断地把东西拆开,把东西拆开,提取方法,类,等等,所有这些都是为了避免最终以神秘的方式做 100000 件事情的上帝对象。

在处理遗留代码中的此类 类 时(这是一个可以写整本书的主题(而且人们已经写过)),通常认为进行最少数量的重构是一种很好的做法需要使代码完全可测试(无需诉诸反射和类似的丑陋黑客)。然后用测试覆盖代码,直到您相当确信可以在不违反合同的情况下开始对其进行更改。

此时您可以开始重构、分解内容、提取内容并发疯,直到您拥有更易于管理的内容。

底线是:,不要测试私有方法。它会导致难以理解的脆弱测试,只会巩固糟糕的设计,而不是帮助您获得更好的设计(TDD 的明确目标之一)。

就算你觉得"well it's better to get the coverage fast now and I can fix it later",不,不值得。这是一笔巨大的技术债务,您将不会在未来 10 年内偿还。就是太麻烦了