如何编写用于 async/await 方法的单元测试,我正在使用 Visual Studio 2013。
假设我们有一个 async 方法:
public async Task DoSomethingAsync()
{
...
await _service.DoInternalAsync();
...
}
由于我使用的是最新版本的Visual Studio,它对异步方法单元测试具有良好支持:
[TestMethod]
public async Task DoSomthingAsyncTest()
{
...
await _objectUnderTest.DoSomethingAsync();
// how to verify the result??? here is what I did
_service.Verify(_ => _.DoInternalAsync());
}
基本上,我有两个问题:
- 如代码中所述,如何验证
Task
的结果?我这样做对吗? - 如果我运行该测试,VS会说测试通过。但是当我检查代码覆盖率时,从代码覆盖率结果的视图来看,
await _service.DoInternalAsync()
语句似乎未被覆盖,它提示MoveNext()
语句有6个未被覆盖的块。其中有什么问题?
async
方法只返回一个任务,因此只需断言Service
的模拟被调用即可。无需测试其他内容,您的service
类中的单元测试已经覆盖了其行为。如果有返回值,可以使用一种方式来模拟具有异步方法的类。 - Pierre-Luc Pineault