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 回だけインクリメントできるようにすることですか? 次のシナリオは起こり得ますか?

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 に答える