What's the difference between using the constructor in VS Testing framework vs. TestInitialize() attribute?

Ray*_*Ray 22 unit-testing visual-studio

快问,我正在使用Visual Studio的测试框架进行单元测试.只是想知道使用构造函数进行初始化工作与使用[TestInitialize()]属性的方法有什么区别?

maf*_*afu 10

这篇文章概述了不同的方法.正如你所看到的那样,ctor在紧接着之前被调用ClassInitialize(当然只有一次)和TestInitialize.

因此,ClassInitialize在您的TestInitialize方法中放入需要代码的东西.之前应该设置的所有东西ClassInitialize都在ctor中.

显然,TestInitialize内容将在每次测试之前执行一次.每次测试后关闭的相应方法是TestCleanup.对于课程,请使用ClassCleanup.对于程序集也存在同样的事情(AssemblyInitialize/Cleanup).

进一步阅读

  • 你的前两句不正确。在每次测试之前调用 ctor(它获得自己的实例)。`ClassInitialize` 在任何 ctor(以及任何测试)之前被调用(一次)——这就是为什么它必须是静态的! (5认同)

Oha*_*der 6

从概念上讲,它们是相同的,因为 MSTest 在每次测试执行之前都会创建一个测试类的新实例。但是,从技术上讲,存在一些差异:

  1. ctor 之前被调用TestInitialize(毫不奇怪,因为后者是一个实例方法)。
  2. 您可以访问TestContextin TestInitialize
  3. 更多继承场景通过TestInitializehttps : //stackoverflow.com/a/8689398/67824启用。
  4. 您可以readonly在 ctor 中分配字段。我认为这很重要:https : //stackoverflow.com/a/45270180/67824