Рассмотрим этот модульный тест:
[TestMethod]
public void QueueManager_OnNextItem()
{
bool called = false;
var queue = new QueueManager<int>(
new Moq.Mock<ILogger>().Object,
new Moq.Mock<IItemQueueManagerPerformanceTracker>().Object);
queue.OnNextItem += i => { called = true; };
queue.Add(1);
queue.Start();
//need to RELIABLY wait here
Assert.IsTrue(called);
}
QueueManager
имеет внутренний рабочий поток (Start()
запускает его), который исключает элемент из очереди и вызывает OnNextItem
.
При выполнении этого теста он всегда будет всегда терпеть неудачу, так как Assert...
вызывается до того, как произойдет переключение контекста, чтобы выполнить called = true
.
Я поставил Thread.Sleep(blah)
до Assert...
.
Этот работает , когда тест выполняется изолированно.
Тем не менее, запустить его будет другая нагрузка модульных тестов, и я обнаружил, что мне предлагают старый добрый ...
процесс агента был остановлен во время выполнения теста
... который не имеет немедленного разрешения Модульное тестирование - процесс агента был остановлен во время выполнения теста. и оставляет вас подверженным VS 2010 Ошибка Runner Test «Процесс агента был остановлен во время выполнения теста. ”
Итак, в свете этого ... какой подход я могу использовать для проверки того, что мое событие запускается И это надежно, чтобы не мешать процессу сборки?
ТИА