ClassInitialize似乎每次测试都会被调用。我想这是因为每次测试都会创建一个新类。
为什么呢?其他每个框架都没有这样做!
无论如何......我需要在类上执行一个方法(不是静态的)。我还需要在类的同一个实例中执行所有测试方法。
我是没有划桨的小河吗?
答案 0 :(得分:16)
ClassInitialize
之前,MSTest会调用 TestMethod
,请参阅备注here。在每个测试方法之前调用TestInitialize
一次。 MSTest为每个TestMethod
调用创建测试类的新实例。这就是ClassInitialize
是静态方法的原因。
我需要在类上执行一个方法(不是静态的)。我还需要在类的同一个实例中执行所有测试方法。
你的意思是你需要在TestClass
或被测试的类(你实际测试的类)上执行一个方法吗?
在任何一种情况下,您都可以在TestClass
中拥有静态成员,并在ClassInitialize
中初始化一次。它只会创建一次并在测试的生命周期内存在。您只能在其上调用一次方法。然后,您可以在每个测试方法中使用此单个实例。
需要注意的一点是,MSTest可以交错来自不同类的测试。因此,如果您有任何可从多个ClassInitialize
访问的全局可变状态(或测试该问题),则可能发生不可预测的事情。因此,最好避免使用静力学。
必须在同一个实例上执行所有方法的要求非常不寻常。也许有一种方法可以重构代码以消除这种约束?