Ich habe eine Methode, die so aussieht:
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);
}
Ich versuche es wie folgt zu testen:
[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();
}
Meine Behauptung wird aufgerufen, bevor ich mit dem verspotteten LookUpIdAsync fertig bin. In meinem normalen Code ist das genau das, was ich will. Aber für meinen Unit-Test will ich das nicht.
Ich konvertiere von BackgroundWorker nach Async / Await. Mit Background Worker funktionierte dies korrekt, da ich warten konnte, bis der BackgroundWorker fertig war.
Aber es scheint keine Möglichkeit zu geben, auf eine asynchrone Methode zu warten ...
Wie kann ich diese Methode testen?