У меня есть метод, который выглядит так:
private async void DoStuff(long idToLookUp)
{
IOrder order = await orderService.LookUpIdAsync(idToLookUp);
// Close the search
IsSearchShowing = false;
}
//Other stuff in case you want to see it
public DelegateCommand<long> DoLookupCommand{ get; set; }
ViewModel()
{
DoLookupCommand= new DelegateCommand<long>(DoStuff);
}
Я пытаюсь выполнить unit test так:
[TestMethod]
public void TestDoStuff()
{
//+ Arrange
myViewModel.IsSearchShowing = true;
// container is my Unity container and it setup in the init method.
container.Resolve<IOrderService>().Returns(orderService);
orderService = Substitute.For<IOrderService>();
orderService.LookUpIdAsync(Arg.Any<long>())
.Returns(new Task<IOrder>(() => null));
//+ Act
myViewModel.DoLookupCommand.Execute(0);
//+ Assert
myViewModel.IsSearchShowing.Should().BeFalse();
}
Мое утверждение вызывается до того, как я закончу с издеваемым LookUpIdAsync. В моем нормальном коде это то, что я хочу. Но для моего unit test я этого не хочу.
Я перехожу к Async/Await с помощью BackgroundWorker. С фоновым рабочим это работало правильно, потому что я мог дождаться завершения BackgroundWorker.
Но, похоже, не существует способа ждать метода async void...
Как я могу unit test использовать этот метод?