您在多大程度上对类/模块/包/等的内部/私有组件进行单元测试?您是否对它们进行了测试,还是仅测试了与外界的接口?这些内部方法的一个示例是私有方法。
例如,想象一下递归下降解析器,它具有从一个中央过程调用的几个内部过程(函数/方法)。到外部世界的唯一接口是中央过程,该过程采用字符串并返回已解析的信息。其他过程解析字符串的不同部分,可以从中央过程或其他过程中调用它们。
当然,您应该通过使用示例字符串调用外部接口并将其与手动分析的输出进行比较来测试外部接口。但是其他程序呢?您是否会分别测试它们以检查它们是否正确解析了其子字符串?
我可以想到一些论点:
优点:
- 测试越多越好,这可以帮助增加代码覆盖率
- 通过向外部接口提供输入,某些内部组件可能很难提供特定的输入(例如,边缘情况)
- 更清晰的测试。如果内部组件具有(已修复的)错误,则该组件的测试用例可以清楚地表明该错误位于该特定组件中
缺点:
- 重构变得非常痛苦和耗时。要更改任何内容,即使外部接口的用户不受影响,也需要重写单元测试。
- 某些语言和测试框架不允许这样做
您对此有何看法?