【发布时间】:2019-08-28 04:26:54
【问题描述】:
我有一个看起来像这样的方法:
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);
}
我正在尝试像这样对其进行单元测试:
[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 之前调用了我的断言。在我的正常代码中,这正是我想要的。但是对于我的单元测试,我不希望这样。
我正在从使用 BackgroundWorker 转换为 Async/Await。使用后台工作人员,这可以正常工作,因为我可以等待 BackgroundWorker 完成。
但似乎没有办法等待 async void 方法...
如何对这个方法进行单元测试?
【问题讨论】:
标签: c# .net unit-testing async-await