Я работаю над большим количеством интеграционных тестов в MSTest (100+ для подсистемы), и я действительно хочу группировать связанные тесты в свои собственные тестовые классы, для удобства чтения и потому, что разные для тестовых групп требуется другая настройка конфигурации.Совместное использование сервисов в тестовых классах в MSTest
Испытания первоначально начались с одного большого тестового класса, который содержал статические экземпляры определенных служб. Эти услуги требуют времени, чтобы развернуться и будут доминировать над временем выполнения теста, если они будут подняты и снесены для каждого теста. Первоначальный тестовый код начинался следующим образом.
[TestClass]
public class IntegrationTests
{
static ServiceA serviceA = new ServiceA();
static ServiceB serviceB = new ServiceB();
[ClassInitialize]
public static void ClassInit(TestContext context)
{
/* Gets the services up and going */
}
[TestInitialize]
public void TestInit()
{
/* Gets services back into good states */
}
/* Lots and lots of Integration tests */
[ClassCleanup]
public static void ClassCleanup()
{
/* Tear down the services */
}
}
Проблема с этими различными группами тестирования требует, чтобы сервисы были помещены в разные состояния перед запуском тестов.
Моя первая идея состояла в том, чтобы держать статические услуги в классе общего базового тест, а затем создать новые тестовые классы, которые наследуют от базового класса для каждой тестируемой группы, например:
[TestClass]
public class TestClassA : IntegrationTests
{
/* tests */
}
[TestClass]
public class TestClassB : IntegrationTests
{
/* tests */
}
[TestClass]
public class TestClassC : IntegrationTests
{
/* tests */
}
Проблема с то есть услуги разматываются и срываются для каждого тестового класса. Конечно, это не так плохо, как они создаются и уничтожаются для каждого отдельного теста, но я хотел бы создать их один раз для каждого тестового прогона.
Есть ли способ иметь отдельные тестовые классы, которые все используют одни и те же услуги для тестирования интеграции в MSTest?
Как обычно, мне удалось ответить на мой вопрос, прежде чем кто-то еще это сделал. Решение было очень похоже на это. Внутри моего базового класса тестов я создал статический конструктор, который обрабатывал весь код инициализации. Этот метод также будет работать. – CHendrix