Сброс статической переменной в начале каждого метода теста 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;
}