现代单元测试框架支持等待异步单元测试的结果,如下所示:
public async Task SomeTest()
{
var result = await SomeMethodAsync();
// ... Verify the result ...
}
使用这种异步方法比使用简单阻塞有什么好处吗?
public void SomeTest()
{
var result = SomeMethodAsync().Result;
// ... Verify the result ...
}
在同时运行测试时,async是否只提供了一个好处?
答案 0 :(得分:8)
async
代码的主要好处是客户端的响应式UI和服务器端的可伸缩性。对于单元测试,您可以获得一定的可扩展性(这可以转化为整体速度优势,因为单元测试本质上是突发的。)
但这不是一个巨大的好处。你的测试(可能)运行得更快。
由于以下原因,我通常使用async Task
单元测试方法:
await
不会在AggregateException
中包含例外。async Task
单元测试方法。答案 1 :(得分:1)
使用这种异步方法是否有任何优势 阻断?
我认为这实际上取决于您正在测试的 。如果从单元测试框架的角度来看它,那么我在这里看不到任何好处。我不认为这样的框架需要在IO方面进行扩展。您正在做的唯一事情是测试异步API的行为方式。例如,作为库作者,您可以拥有一个异步端点,并测试当调用者同步阻止您的代码时会发生什么,该调用者不了解如何正确使用您的库。
一个例子可能是:
[TestClass]
public class M
{
[TestMethod]
public void X()
{
var myService = new MyService();
myService.FetchSomeDataAsync().Result; // Will this deadlock?
}
}