【发布时间】:2010-01-06 16:54:45
【问题描述】:
我想知道我应该如何通过 NUnit 测试这种功能。
Public void HighlyComplexCalculationOnAListOfHairyObjects()
{
// calls 19 private methods totalling ~1000 lines code + comments + whitespace
}
从阅读中我看到 NUnit 不是为了测试私有方法而设计的,因为哲学原因是关于单元测试应该是什么;但是尝试创建一组完全执行计算中涉及的所有功能的测试数据几乎是不可能的。同时,计算被分解为一些相当离散的较小方法。然而,它们不是合乎逻辑的事情,可以彼此独立完成,因此它们都被设置为私有。
【问题讨论】:
-
正如其他人所指出的:如果一个类很难测试,这通常表明该类试图做太多事情。如果计算可以分解为更小的方法,是否可以将其进一步分解为单独的阶段,每个阶段由其自己的类/接口表示?或者,如果计算主要由一堆复杂的公式组成,你可以有一个专门的
Math类,其中有一堆静态方法来实现每个公式。 -
在当前范围/预算/时间之外进行一定程度的重构。
-
丹 - 你最后做了什么?我们遇到了同样的问题。
-
我最终链接到 Visual Studio 测试框架并添加“使用 PrivateObject = Microsoft.VisualStudio.TestTools.UnitTesting.PrivateObject;”到我的测试项目,这样我就可以访问私有成员,而无需编写自己的反射类。然后,我在调用树的底部添加了一些私有方法的低级测试,以补充运行顶级公共方法的高级测试。目前没有明确涵盖中间层方法的测试。稍后我可能会添加它们,但创建输入所需的设置量令人望而却步。
-
如下所述,这不是理想的选择,但不存在用于重大重新设计的资金,所以我正在尽我所能。当有额外资金可用时,或针对发现的任何具体问题,将考虑对测试进行未来改进。
标签: c# unit-testing nunit