TestInitialize与ClassInitialize


71

TestInitializeClassInitializeMSTest之间的区别是什么?每种都有哪些利弊?

我觉得TestInitialze应该每次都要进行EACH测试?那是对的吗?那ClassInitialize将在任何类的新实例每次运行时运行吗?

Answers:


107

这两个属性仅可用于它们所属的类(以及测试)。

TestInitialize声明属性的同一类上声明的每个测试之前运行。

ClassInitialize在声明属性的类的初始化上运行。换句话说,它不会在每个课程上都运行。仅针对包含ClassInitialize方法的类。

如果您想要一个将在所有测试或类的初始化之前运行一次的方法,请使用AssemblyInitialize


3
ClassInitialize和AssemblyInitialize的用例是什么?我很难获取ClassInitialize的实际用例...
Ini

2
一种用例是使用需要很长时间才能运行的初始化方法运行DLL的集成测试。ClassInitialize可在一批测试开始时用于执行初始化,并且ClassCleanup将调用DLL的终止方法。
user8550137 '18

另一种情况是使用大量注入的依赖项和模拟设置来设置对象。我有一些带有100多个行的测试类,否则需要在每个测试中进行。
DPH

2
@DPH TestInitialize适用于重复的代码,只有运行代码花费很长时间,您才可以使用ClassInitialize
Michael Freidgeim
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.