2

我以下列方式在同一个测试程序集中有 N 个 MSTest 测试类和方法(它使用相同的静态变量)。

[TestClass]
public class TestClass1
{
    [TestMethod]
    public void TestMethod1A()
    {
        MyClass.StaticVariable = 0;
        MyClass.StaticVariable = MyClass.StaticVariable + 1;
        Assert.AreEqual(1, MyClass.StaticVariable)
    }

    [TestMethod]
    public void TestMethod1B()
    {
        MyClass.StaticVariable = 0;
        MyClass.StaticVariable = MyClass.StaticVariable + 1;
        Assert.AreEqual(1, MyClass.StaticVariable)
    }
}

[TestClass]
public class TestClass2
{
    [TestMethod]
    public void TestMethod2A()
    {
        MyClass.StaticVariable = 0;
        MyClass.StaticVariable = MyClass.StaticVariable + 1;
        Assert.AreEqual(1, MyClass.StaticVariable)
    }

    [TestMethod]
    public void TestMethod2B()
    {
        MyClass.StaticVariable = 0;
        MyClass.StaticVariable = MyClass.StaticVariable + 1;
        Assert.AreEqual(1, MyClass.StaticVariable)
    }
}

这些测试能保证通过吗?我的观点是 MSTest 是否总是同步执行测试方法,只允许 MyClass.StaticVariable 在被断言之前被初始化和递增一次?会不会出现以下场景?

1. TestMethod1A makes MyClass.StaticVariable 0
2. TestMethod2B increments MyClass.StaticVariable by 1
3. TestMethod1A increments MyClass.StaticVariable by 1 (making the value equal to 2)
4. TestMethod1A asserts (Fail!)
4

1 回答 1

1

MSTest 支持多线程,但需要在测试设置文件中开启。默认情况下,所有测试都将同步运行。

此外,如果您想在每次测试运行时重置一个变量,您可以在方法上放置一个属性,并且该方法将在该类中的每个测试之前运行:

[TestInitialize()]
public void TestInit()
{
    MyClass.StaticVariable = 0;
}
于 2013-02-03T14:14:02.317 回答