【发布时间】:2014-06-20 20:28:54
【问题描述】:
我有一个代码库,它在许多有意义的情况下使用静态变量,例如标记某些东西自启动以来已经运行过一次,等等。
当然,这可能会导致单元测试出现问题,因此突然顺序很重要,并且对此类方法的测试结果可能取决于之前是否已命中其他代码等。我对 TestTools.UnitTesting 的理解是每当我运行一组单元测试时,同一个项目中的任何一个都在同一个进程中运行,因此从测试到测试都保持任何静态状态,而单元测试项目边界也意味着一个进程边界,因此,如果我运行来自项目 A 的 3 个测试,然后来自项目 B 的第四个测试,状态保持从 1>2>3(以它们运行的任何顺序),但随后 4 是处女并且任何静态状态都是默认的。
所以现在我的问题是两个:
1) 我的评估是否正确,即当测试在组中运行(全部运行或选择运行)时,单元测试项目与流程具有 1:1 的关系,还是我遗漏了更多细微差别?
2) 无论如何,如果我有一个测试肯定需要它使用和测试的自定义对象的新鲜、默认静态状态,我有没有比给它自己的测试项目更优雅的创建它的选项?
【问题讨论】:
-
附带说明,您可以让测试加载 AppDomain,然后在 AppDomain 中运行测试。可能的优点是静态变量是每个 AppDomain 的。缺点是工作量很大。
-
非常有用的信息,与下面 mike z 的回答非常相似。
标签: c# .net unit-testing