8

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

为什么?所有其他框架都不会这样做!

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

我是在没有桨的小溪上吗?

4

1 回答 1

17

ClassInitialize在调用任何 s 之前由 MSTest 调用一次,请参见此处TestMethod的备注。在每个测试方法之前调用一次。MSTest 为每个调用创建一个新的测试类实例。这就是为什么是静态方法。TestInitializeTestMethodClassInitialize

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

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

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

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

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

于 2012-07-19T22:55:33.847 回答