Какова область применения тестового класса при запуске модульных тестов?
Когда Visual Studio выполняет модульные тесты, она запускает много тестов одновременно. Какова область действия тестового класса, пока они работают? Все они работают в отдельных доменах приложений или данные используются совместно?
Например, если у меня есть следующий тестовый класс:
[TestClass]
public class FooTests
{
Mock<ISomeInterface1> _complexMock1;
Mock<ISomeInterface2> _complexMock2;
public void CreateComplexMocks()
{
//set up _complexMock1 & _complexMock2
}
[TestMethod]
public void Test1()
{
CreateComplexMocks();
//use _complexMock1 & _complexMock2 in test
}
[TestMethod]
public void Test2()
{
CreateComplexMocks();
//use _complexMock1 & _complexMock2 in test
}
}
Тесты используют CreateComplexMocks()
помощник, чтобы построить некоторые макеты. Они выставляются как члены, а не возвращаются к тесту (вероятно, их было бы гораздо больше в реальном примере)
Мой вопрос: если оба теста будут выполняться одновременно, будут ли они сообщать о состоянии _complexMock1
а также _complexMock2
?
Что если complexMocks были статическими?
2 ответа
Найдя этот блог, может показаться, что для каждого теста в отдельном потоке создается отдельный класс теста.
Таким образом, члены экземпляра не будут разделены, но статические участники будут.
В вашем примере вы должны создать свои макеты в методе [TestInitialize].
Таким образом, каждый раз, когда будет выполняться тест, ваши макеты будут создаваться снова.
[TestInitialize]
public void TestInit()
{
CreateComplexMocks();
}