gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 21:16:57 26 4
gpt4 key购买 nike

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

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com