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

为何MSpec的Catch.Exception在异步方法中无法正常工作?

MSpec异步测试捕获异常失败的解决办法

为啥异步版本会返回null?

你用的同步版Catch.Exception没法处理异步lambda——异步lambda返回的是Task,同步捕获逻辑只会启动这个Task但不会等它跑完,异步方法里抛的异常会被包在Task里,同步捕获根本拿不到,所以exception就成了null。

正确写法

得用异步版的Catch.Exception重载,同时把Because改成异步委托,用async/await等异步操作完成,才能抓到异常:

static Exception exception;

private Because of = async () =>
    exception = await Catch.Exception(async () => throw new NotFoundException("test"));

It should_throw_exception = () =>
    exception.ShouldBeOfExactType<NotFoundException>();

要点

  • Catch.Exception有专门的异步重载Task<Exception> Exception(Func<Task> action),必须用await等它返回,才能拿到异步方法里的异常。
  • MSpec的Because支持异步委托,只要把委托标成async,配合await用就行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 07:00:59