如何对公共接口背后高度复杂的代码进行单元测试

Dan*_*ely 10 c# nunit unit-testing

我想知道如何通过NUnit测试这种功能.

Public void HighlyComplexCalculationOnAListOfHairyObjects()
{
    // calls 19 private methods totalling ~1000 lines code + comments + whitespace
}
Run Code Online (Sandbox Code Playgroud)

从阅读中我可以看出,NUnit的设计目的不是为了测试私有方法,而是出于对单元测试应该是什么的哲学原因; 但是试图创建一组完全执行计算中涉及的所有功能的测试数据几乎是不可能的.同时,计算分解为许多合理离散的小方法.然而,它们并不具有逻辑意义,彼此独立地完成,所以它们都被设置为私有.

S.L*_*ott 8

你把两件事混为一谈.接口(可能会暴露很少)和这个特定的实现类,可能会暴露更多.

  1. 定义最窄的接口.

  2. 使用可测试(非私有)方法和属性定义Implementation类.如果班级有"额外"的东西,那也没关系.

  3. 所有应用程序都应使用接口,因此 - 不能对类的公开功能进行类型安全访问.

如果"某人"绕过接口并直接使用该类,该怎么办?他们是反社会人士 - 你可以放心地忽略他们.不要为他们提供电话支持,因为他们违反了使用接口而非实施的基本规则.