为何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
相关产品推荐
相关产品推荐

