使单元测试类静态是否有意义?

时间:2012-02-27 15:30:26

标签: c# unit-testing nunit ndepend

我一直在我的代码库上使用NDepend,而我的实际代码似乎通过了绚丽的色彩,我的单元测试代码可能会使用很多工作。 NDepend提出的建议之一是将我的许多单元测试类转换为静态类,因为测试之间存在高度分离。看起来这似乎有助于不在测试之间共享状态,并允许它们以任何顺序进一步运行。我应该将单元测试类转换为静态类吗?

在同一TestFixture中的测试方法之间共享状态,当然还有TestFixtures之间的共享状态

2 个答案:

答案 0 :(得分:1)

如果您的测试不需要按特定顺序运行,或者它们不依赖于初始化代码,则可以将它们设置为静态。

请记住,这不是成功的秘诀。

答案 1 :(得分:0)

趣!我以前从未见过有人将NDepend分析应用于测试项目。虽然单元测试应该被视为代码库的一等公民,但它们通常不与应用程序一起部署,因此不会使用相同的体系结构约束(FxCop,NDepend等)进行查看。在某种程度上,我同意这种方法,需要验证测试的质量,但除了识别生产代码中也会识别的类耦合问题之外,我无法看到工具可以提供的好处。

关于NUnit,它通常为该测试类中的所有测试方法实例化一个testfixture实例。状态在测试之间共享,这是好事还是坏事。

好:在设置测试夹具时可以设置创建需要时间的状态。

错误:应该在测试之间重置的状态取决于您在测试之间进行修复。

如果NUnit支持测试的静态方法,并且如果在测试夹具中需要任何状态,那么这些字段将需要是静态的。这实际上非常可怕,因为测试状态在测试appDomain的生命周期内共享。

关键是使用NUnit属性进行夹具和测试初始化​​/拆卸。永远不要使用构造函数或终结器进行夹具初始化,因为无法控制NUnit框架何时创建类。