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

如何用NSubstitute模拟首次调用抛异常、二次调用成功的方法?

使用NSubstitute实现方法首次调用抛异常、二次调用返回结果

NSubstitute支持按调用顺序配置方法行为,直接按顺序链式调用.Throws()和.Returns()就能实现你要的效果,代码如下:

restClient.GetAsync<FieldResponse>("url")
    .Throws(new Exception("error")) // 首次调用抛出异常
    .Returns(Task.FromResult(fakeFieldResponse)); // 二次及后续调用返回结果

补充说明

  • 针对异步方法,NSubstitute会自动将.Throws()中的异常包装为故障Task,无需手动创建Task.FromException;
  • 如果需要更灵活的多调用配置(比如超过两次的不同行为),可以用队列来管理返回/抛出逻辑:
var responseQueue = new Queue<object>();
responseQueue.Enqueue(Task.FromException<FieldResponse>(new Exception("error")));
responseQueue.Enqueue(Task.FromResult(fakeFieldResponse));

restClient.GetAsync<FieldResponse>("url")
    .Returns(_ => responseQueue.Dequeue());

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 22:13:08