【发布时间】:2016-11-16 06:42:45
【问题描述】:
我们正在开发一个新的 API。我和我的同事对于内部类是否应该进行单元测试有不同的看法。
我的同事给出的没有对内部类进行单元测试
的要点- 单元测试应仅针对公共类/方法编写
- 您应该能够覆盖您的完整代码,包括通过公共 API 本身的内部类。如果您的内部类没有通过公共接口进行测试,则意味着缺少一些测试用例,或者您发现了不需要的死代码。
- 为内部类编写单元测试可能会导致冗余测试,或者可能会强制编写从不需要的代码。
我在支持单元测试内部类
中给出的分数- 仅通过单元测试公共类来覆盖完整的代码可能很困难/不切实际。为内部类编写单元测试至少可以确保它们在自己的环境中正确运行,并且我们可以进行集成测试来测试整个应用程序的正确性。
- 即使有一些冗余的单元测试,也比在顶层缺少测试用例要好。
- 内部类对其环境是公开的,因此我们应该独立测试它们。如果只有 1 个公共类和 100 个内部类,很难通过公共接口覆盖所有场景。
我尝试在线搜索,但似乎没有关于此的最佳做法或标准意见。您认为什么是可以遵循的好方法?
java 人士注意:“internal”是 C# 中的一个关键字,它限制类对程序集的可见性。该类将无法在包/程序集之外访问。不等同于私有类。
【问题讨论】:
-
虽然对公共类和方法进行全面的单元测试就足够了,但现实情况是单元测试很少会是完全全面的。事实上,由于停止问题,您不能保证您的单元测试是全面的。针对内部类和方法进行单元测试可以让您更加确信自己已经发现了潜在问题。
-
对于 SO 来说太宽泛/太基于意见了。这个问题的某种形式可能已经在Software Engineering 上得到回答/讨论。
-
@AlexeiLevenkov 不知道 SO 不适用于基于意见的问题。这可以转移给程序员吗?顺便说一句,我没有找到围绕这个确切主题的任何讨论。
-
投票重新开放,因为这个问题可以根据事实来回答(虽然也可以根据意见回答)。
标签: c# unit-testing tdd