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

