现代单元测试框架支持等待异步单元测试的结果,如下所示:
public async Task SomeTest() { var result = await SomeMethodAsync(); // ... Verify the result ... }
使用这种异步方法比简单阻塞更有优势吗?
public void SomeTest() { var result = SomeMethodAsync().Result; // ... Verify the result ... }
在并行运行测试时,async是否只提供了一个好处?
解决方法
异步代码的主要好处是客户端的响应式UI和服务器端的可伸缩性.对于单元测试,您可以获得一定的可扩展性(这可以转化为整体速度优势,因为单元测试本质上是突发性的).
但这不是一个巨大的好处.您的测试(可能)运行得更快一些.
我通常使用异步任务单元测试方法,原因如下:
>如果您在上下文中测试代码,那么阻塞可能会导致典型的死锁问题.请注意,默认情况下,某些框架(例如xUnit)始终提供上下文.即使对于其他框架,通常也需要为单元测试viewmodel提供上下文.> await不会在AggregateException中包装异常.>您确实获得了一些可扩展性优势(理论上)允许您的单元测试整体运行得更快.假设您的框架并行运行测试.>为什么不呢?它们和同步方法一样简单.自2012年以来,每个主要单元测试框架都支持异步任务单元测试方法.