Я работаю в приложении, которое в основном однопоточное, однопользовательское. Существует несколько рабочих потоков здесь и там, и они используют только потокобезопасные объекты и классы. Модульные тесты фактически тестируют те, у которых есть несколько потоков (явно созданных для тестов), и они отлично проверяют.
Тестирование модулей VSTS не выполняется при тестировании бизнес-объектов и подсистем, которые не являются потокобезопасными. Это нормально для них, чтобы они не были потокобезопасными, так как приложение их использует.
Но метод "один поток на тестMethod" тестов MS убивает нас. Я должен был реализовать блокировки объектов во многих классах unit test, чтобы гарантировать, что тесты запускаются один за другим (я действительно не забочусь о порядке, но я не могу использовать два метода тестирования, ударяющих один и тот же объект в то же время).
Код выглядит следующим образом:
[TestClass]
public class TestSomeObject
{
static object turnStile = new object();
...
[TestMethod]
public void T01_TestThis()
{
lock(turnStile)
{
.. actual test code
}
}
[TestMethod]
public void T02_TestThat()
{
lock(turnStile)
{
-- actual test code
}
}
}
Есть ли лучший/более элегантный способ сделать тестовый запуск последовательно?