You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Assert.ThrowsAsync捕获ValueTask方法抛出的ArgumentException?

解决ValueTask异步方法的异常断言问题

你的测试代码存在核心问题:未等待Assert.ThrowsAsync的异步任务完成,导致测试框架无法捕获方法抛出的异常,进而触发断言失败。

修正后的测试代码

[Fact]
public async Task UploadFileAsync_WhenFileKeyParameterIsEmpty_ReturnArguementException()
{
     string fileKey = "";
     // 添加await等待异步任务完成,才能获取到抛出的异常实例
     var ex = await Assert.ThrowsAsync<ArgumentException>(() => objHttpService.UploadFileAsync(fileKey)); 
     Assert.Equal("The value cannot be null or empty. (Parameter 'fileName')", ex.Message);
}

关键说明

  1. Assert.ThrowsAsync返回的是Task<ArgumentException>类型的异步任务,只有通过await关键字等待任务执行完成,才能捕获到异步方法(包括方法内同步执行阶段抛出的异常)中的异常。
  2. 原代码未等待异步任务,测试框架会判定没有异常抛出,因此出现"Expected: typeof(System.ArgumentException), Actual: (No exception was thrown)"的错误。

内容的提问来源于stack exchange,提问作者Ahmed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 09:00:58