我想知道在MSTest下的测试类中初始化实例变量的最佳做法是什么。假设我有一个测试课,其中有很多开销来嘲弄和设置支持对象。我只想做一次,而不是在每个测试中重复相同的代码。我的想法是使用MyClassInitialize方法初始化所有测试可以访问的全局实例变量。这样,我一次初始化全局实例变量,并在每次测试运行时使用它们。MSTest,MyClassInitialize和实例变量
不幸的是,MyClassInitialize方法是静态的,所以不能初始化全局实例变量。我想过让全局实例变量是静态的,但似乎并不是正确的解决方案。我接下来想到的只是将初始化代码放入测试类本身的构造函数中,但我内心却一直在说MyClassInitialize就是我应该使用的。另一个想法是使用MyTestInitialize,因为该方法不是静态的,但是这将在每次测试中反复创建对象。这是否合适?
是否存在如何在测试中使用变量的最佳实践,其中这些变量只需要在测试运行之前初始化一次?以下是我正在谈论的一个人为的例子。
[TestClass()]
public class ProgramTest
{
// this object requires extensive setup so would like to just do it once
private SomeObjectThatIsUsedByAllTestsAndNeedsInitialization myObject;
private TestContext testContextInstance;
[ClassInitialize()]
public static void MyClassInitialize(TestContext testContext)
{
// initializing SomeObjectThatIsUsedByAllTestsAndNeedsInitialization clearly will
// not work here because this method is static.
}
[TestMethod()]
public void Test1()
{
// use SomeObjectThatIsUsedByAllTestsAndNeedsInitialization here
}
[TestMethod()]
public void Test2()
{
// use SomeObjectThatIsUsedByAllTestsAndNeedsInitialization here
}
[TestMethod()]
public void Test3()
{
// use SomeObjectThatIsUsedByAllTestsAndNeedsInitialization here
}
}
无法真正量化我的静态问题。它只是不“感觉”正确,但我无法解释为什么。 – meyousikmann 2012-03-15 11:57:38
静态意味着它由班级拥有。非静态的东西由类的实例拥有。当试图确定一件事是否应该是静态的时,问问自己'这是整个班级拥有还是只是一个实例? – Tristan 2014-10-03 04:16:30