在VS Testing框架中使用构造函数与TestInitialize()属性之间有什么区别?

时间:2010-06-21 17:44:04

标签: visual-studio unit-testing

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

3 个答案:

答案 0 :(得分:10)

This post概述了不同的方法。如您所见,在ClassInitialize之前(当然只有一次)和TestInitialize之前会立即调用ctor。

所以在ClassInitialize方法中放置需要TestInitialize代码的内容。应该在ClassInitialize之前设置的所有内容都在ctor中。

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

Further reading

答案 1 :(得分:2)

ctor用于初始化对象。

TestInitialize用于初始化运行测试所需的任何对象或数据。

答案 2 :(得分:2)

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

  1. TestContext之前调用ctor(因为后者是一种实例方法,所以不足为奇)。
  2. 您可以访问TestInitialize中的TestInitialize
  3. 使用readonly启用了更多继承方案:https://stackoverflow.com/a/8689398/67824
  4. 您可以在ctor中指定loginUser(email, password).then((token) => { console.log("in then") //ipcRenderer.send('login-success', token) }).catch(err => { console.log("in catch") //not running }) 个字段。我认为这非常重要:https://stackoverflow.com/a/45270180/67824