C#中单元测试的生命周期是多少

时间:2014-08-20 13:42:42

标签: c# .net visual-studio unit-testing mstest

在Visual Studio中的C#中完整的 MSTest 运行单元测试中的事件顺序是什么?(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似乎一次顺序运行一个测试。但是,在接受的答案中解释的原因不应该依赖于此。

2 个答案:

答案 0 :(得分:1)

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

如果您需要,可以通过使用测试用例强制执行特定的测试订单,但这被认为是不好的做法,因为应该使用测试用例将测试重组(标记)。

答案 1 :(得分:1)

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