如何用NSubstitute实现save方法首次抛异常、符合条件时二次调用不抛
NSubstitute Save方法调用逻辑调整方案
核心实现代码
你可以通过计数器记录调用次数,同时新增字段校验逻辑修改原有配置,调整后代码如下:
// 记录Save方法调用次数 int saveInvokeCount = 0; workItem.When(fake => fake.Save()) .Do(call => { saveInvokeCount++; // 首次调用强制抛出异常 if (saveInvokeCount == 1) { throw new AggregateException(); } // 非首次调用时校验field值,不符合要求才抛出异常 if (workItem.field != "OK") { throw new AggregateException(); } // 满足条件直接返回,不抛出异常 });
逻辑说明
- NSubstitute伪造对象的属性默认自带状态存储,业务代码中对
workItem.field的赋值会被正常保存,不需要额外配置属性的返回逻辑 - 你可以在测试执行完成后添加断言
Assert.AreEqual(2, saveInvokeCount),验证业务代码确实触发了两次Save调用,覆盖异常重试逻辑 - 如果需要区分字段大小写匹配规则,自行修改字符串判断逻辑即可。
内容的提问来源于stack exchange,提问作者Yu Lan
相关产品推荐
相关产品推荐

