Я работаю в приложении, которое в основном однопоточное, однопользовательское.
Здесь и там есть несколько рабочих потоков, и они используют только потоковые объекты и классы. Модульные тесты на самом деле тестируют тесты с несколькими потоками (явно созданными для тестов), и они тестируются нормально.
Сбой модульных тестов VSTS при тестировании бизнес-объектов и подсистем, которые не являются поточно-ориентированными. Это нормально для них, чтобы не быть потокобезопасными, вот как приложение использует их.
Но подход MS-тестов «один поток на TestMethod» убивает нас. Мне пришлось реализовать блокировки объектов во многих классах модульных тестов, просто чтобы убедиться, что тесты выполняются один за другим (меня не интересует порядок, но я не могу иметь два метода тестирования, поражающие один и тот же объект в в то же время).
Код выглядит так:
[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
}
}
}
Есть ли лучший / более элегантный способ последовательного запуска теста?