如何在NSubstitute中匹配参数、执行操作并返回指定值?
NSubstitute 链式配置参数匹配、自定义操作与返回值
在NSubstitute中,你完全可以通过链式调用一次性完成参数匹配、执行自定义操作(比如将参数字段加入列表)以及指定返回值,不需要分开配置,写法和FakeItEasy的链式体验一致。
举个具体的例子,假设你有如下接口和模型:
public interface IMyService { bool DoSomething(MyModel param); } public class MyModel { public int Id { get; set; } public string Data { get; set; } }
要实现你的需求,代码可以这么写:
var myList = new List<string>(); var service = Substitute.For<IMyService>(); // 链式完成三个需求:匹配参数、执行操作、返回指定值 service.DoSomething(Arg.Is<MyModel>(x => x.Id > 0)) .Do(call => myList.Add(call.Arg<MyModel>().Data)) .Returns(true);
细节说明:
- 参数匹配:用
Arg.Is<T>()指定匹配条件,比如这里只匹配Id>0的MyModel实例;如果要匹配任意参数,用Arg.Any<MyModel>()即可。 - 执行自定义操作:
.Do()方法接收一个CallInfo参数,通过call.Arg<T>()可以获取当前调用的参数,进而提取字段加入myList。 - 指定返回值:
.Returns()直接设置方法的返回结果,支持固定值、动态计算值甚至基于参数的返回逻辑。
.Do()和.Returns()的调用顺序不影响最终效果,只要放在参数匹配的后面就行。
内容的提问来源于stack exchange,提问作者Roni
相关产品推荐
相关产品推荐

