c#中单元测试的生命周期是什么?

本文关键字:周期 是什么 生命 单元测试 | 更新日期: 2023-09-27 18:19:00

完整的MSTest运行在Visual Studio中的c#单元测试(Ctrl+R, a)中的事件顺序是什么?

以下是我目前的想法:
  • 1 -运行[AssemblyInitialize]
  • 2 -随机运行[ClassInitialize]
  • 3 -运行[TestInitialize]
  • 4 -随机运行[TestMethod]从该类
  • 5 -运行类[TestCleanup]
  • 对类
  • 中的每个TestMethod重复3到5
  • 对每个测试类
  • 重复2到5
  • 6 -运行所有类[ClassCleanup]方法
  • 7 -运行[AssemblyCleanup]

但是我认为VS可能会一次初始化多个类,然后随机运行TestMethods。测试应该是跨类自治的,还是跨整个测试项目自治的,甚至是整个解决方案自治的?知道事件的确切顺序应该可以回答这些问题。

更新:

我做了一些测试,发现它确实是事件发生的顺序,除了#3到5,任何类的任何测试都可以运行。Visual Studio似乎是按顺序一次运行一个测试。然而,人们不应该依赖于这个被接受的答案中解释的原因。

c#中单元测试的生命周期是什么?

你是正确的。这确实是代码运行的顺序。但是,由于测试应该是完全独立的,因此不能保证它们将按顺序运行,并且它们将在单个线程上运行。框架可以同时运行多个测试。

如果您也需要的话,您可以通过使用测试用例来强制一个特定的测试顺序,但是这被认为是不好的实践,因为测试用例应该被用来将测试重新组合在一起(标记它们)。

若要为测试定义特定顺序,请创建有序测试(http://msdn.microsoft.com/en-us/library/ms182631.aspx)或创建匹配文件并按所需的指定顺序为每个测试用例调用mstest.exe (http://msdn.microsoft.com/en-us/library/ms182489(VS.80).aspx)