Сброс статической переменной в начале каждого метода теста MSTest

У меня есть 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!)

1 ответ

Решение

MSTest поддерживает многопоточность, но вам нужно включить его в файле настроек теста. По умолчанию все тесты будут выполняться синхронно.

Кроме того, если вы хотите сбрасывать переменную при каждом запуске теста, есть метод, который вы можете поместить в метод, и этот метод будет запускаться перед каждым тестом в этом классе:

[TestInitialize()]
public void TestInit()
{
    MyClass.StaticVariable = 0;
}
Другие вопросы по тегам