MSTest ClassInitialize为整个类一次

时间:2012-07-19 17:58:57

标签: unit-testing mstest

ClassInitialize似乎每次测试都会被调用。我想这是因为每次测试都会创建一个新类。

为什么呢?其他每个框架都没有这样做!

无论如何......我需要在类上执行一个方法(不是静态的)。我还需要在类的同一个实例中执行所有测试方法。

我是没有划桨的小河吗?

1 个答案:

答案 0 :(得分:16)

在调用任何ClassInitialize之前,MSTest会调用

TestMethod,请参阅备注here。在每个测试方法之前调用TestInitialize一次。 MSTest为每个TestMethod调用创建测试类的新实例。这就是ClassInitialize是静态方法的原因。

  

我需要在类上执行一个方法(不是静态的)。我还需要在类的同一个实例中执行所有测试方法。

你的意思是你需要在TestClass或被测试的类(你实际测试的类)上执行一个方法吗?

在任何一种情况下,您都可以在TestClass中拥有静态成员,并在ClassInitialize中初始化一次。它只会创建一次并在测试的生命周期内存在。您只能在其上调用一次方法。然后,您可以在每个测试方法中使用此单个实例。

需要注意的一点是,MSTest可以交错来自不同类的测试。因此,如果您有任何可从多个ClassInitialize访问的全局可变状态(或测试该问题),则可能发生不可预测的事情。因此,最好避免使用静力学。

必须在同一个实例上执行所有方法的要求非常不寻常。也许有一种方法可以重构代码以消除这种约束?