c# - async/await 在单元测试中优于阻塞的优势

标签 c# .net unit-testing asynchronous async-await

现代单元测试框架支持等待异步单元测试的结果,如下所示:

public async Task SomeTest()
{
    var result = await SomeMethodAsync();
    // ... Verify the result ...
}

与简单的阻塞相比,使用这种异步方法有什么优势吗?

public void SomeTest()
{
    var result = SomeMethodAsync().Result;
    // ... Verify the result ...
}

异步是否只在并行运行测试时提供好处?

最佳答案

async 代码的主要好处是客户端的响应式 UI 和服务器端的可扩展性。对于单元测试,您可以获得一些可扩展性(这转化为整体速度优势,因为单元测试本质上是突发的)。

但这并不是一个巨大的好处。您的测试(可能)会运行得更快一些。

我通常使用 async Task 单元测试方法,原因如下:

  • 如果您在上下文中测试代码,那么阻塞可能会导致典型的死锁问题。请注意,某些框架(例如 xUnit)始终默认提供上下文。即使对于其他框架,通常也需要提供上下文来对 ViewModel 进行单元测试。
  • await 不会将异常包装在 AggregateException 中。
  • 您确实获得了一些可扩展性优势,这(理论上)可以让您的单元测试总体上运行得更快。假设您的框架并行运行您的测试。
  • 为什么不呢?它们与同步方法一样简单。自 2012 年以来,每个主要单元测试框架都支持 async Task 单元测试方法。

关于c# - async/await 在单元测试中优于阻塞的优势,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33476959/

相关文章:

mysql - 测试时的 CakePHP 连接

c# - Windows 商店应用程序 - 显示 PDF

c# - 用于搜索引擎优化的 MVC 和元标记

c# - 如何获取任务管理器中显示的事件窗口应用程序名称

c# - 为什么 AspNetCompatibilityRequirementsMode.Allowed 会修复此错误?

c# - 组合两个转换表达式

c# - 使用流畅的 API 配置模拟 DbContext

c# - Entity Framework DbContext 执行的日志查询

c# - 如何从字符串中分离数据

angular - Angular 中十进制验证器的单元测试