Мне нужно убедиться, что задача завершена, прежде чем переходить к остальной части моего модульного теста.
Но это задача, которая ожидается внутри другого метода (я выполняю модульное тестирование метода).
Я пробовал ждать задачи или вызывать task.Wait(), но каждый раз тест не работает.
Фактический метод выглядит так:
private async void DoStuff(long idToLookUp)
{
IOrder order = await orderService.LookUpIdAsync(idToLookUp);
OtherStuff = false;
}
Я пытаюсь выполнить модульное тестирование следующим образом:
[TestMethod]
public void TestDoStuff()
{
//+ Arrange
var lookupTask = Task<IOrderableTest>.Factory.StartNew(() => validOrder);
orderService.LookUpIdAsync(Arg.Any<long>()).Returns(lookupTask);
//+ Act
myViewModel.DoStuff();
await lookupTask;
//+ Assert
myViewModel.OtherStuff.Should().BeFalse();
}
То, как это терпит неудачу, очень бесполезно. В результате другой тест завершается сбоем с сообщением «Процесс агента был остановлен во время выполнения теста». (Из того, что я могу прочитать, это означает, что фоновый поток выдал исключение во время выполнения теста.)
Поэтому мне интересно, как заставить мой код ждать завершения этого модульного теста.
Я видел этот ответ, который кажется довольно хорошим. Но он больше ориентирован на вызов метода. Я не звоню, у меня просто есть задача.
ПРИМЕЧАНИЕ. Я ориентируюсь на .NET 4.0, используя пакет ansyc.
async voids; вы не можете ждать их. - person SLaks   schedule 11.01.2013asyncпросто не будет работать с этими вещами. Очень редко используетсяasync voidправильное решение. - person svick   schedule 11.01.2013