【问题标题】:Does it make sense to make the unit test class static?将单元测试类设为静态是否有意义?
【发布时间】:2012-02-27 15:30:25
【问题描述】:

我一直在我的代码库上使用 NDepend,虽然我的实际代码似乎很顺利,但我的单元测试代码可能需要做很多工作。由于测试之间的高度分离,NDepend 提出的建议之一是将我的许多单元测试类转换为静态类。看起来这可能有助于不在测试之间共享状态,并允许它们进一步以任何顺序运行。我应该将我的单元测试类转换为静态类吗?

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

【问题讨论】:

  • 您的单元测试框架是否可以使用静态测试类(MS 版本不能)?
  • 当您说“这可能有助于不在测试之间共享状态”时,您是指 TestFixture 类之间,还是指 Test 中的方法同一个TestFixture?
  • 我根本不会在您的测试项目上运行 NDepend。我只在生产代码上运行 NDepend,从不在测试代码上运行。
  • 正如 Steven 所建议的,NDepend 规则目前旨在针对生产代码执行。这种情况将在 2012 年内发生变化。 NDepend 团队的 Patrick

标签: c# unit-testing nunit ndepend


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-11
      • 2016-04-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多