NSubstitute: 如何访问Returns中的实际参数

29
我想在NSubstitute的Returns方法中访问实际参数。例如:
var myThing = Substitute.For<IMyThing>()
myThing.MyMethod(Arg.Any<int>).Returns(<actual parameter value> + 1)

使用NSubstitute,我应该在<actual parameter value>的位置写什么,或者如何实现等效的行为?
1个回答

38
根据调用信息文档,调用属性或方法的返回值可以设置为函数的结果。
var myThing = Substitute.For<IMyThing>()
myThing
    .MyMethod(Arg.Any<int>())
    .Returns(args => ((int)args[0]) + 1); //<-- Note access to pass arguments

lambda函数的参数将使得在指定从零开始的位置,可以访问传递给此调用的参数。

对于强类型参数也可以这样做。

var myThing = Substitute.For<IMyThing>()
myThing
    .MyMethod(Arg.Any<int>())
    .Returns(args => args.ArgAt<int>(0) + 1); //<-- Note access to pass arguments

T ArgAt<T>(int position): 获取传递给此调用的参数,转换为类型 T,并指定从零开始的位置。

由于在这种情况下只有一个参数,因此可以进一步简化为

var myThing = Substitute.For<IMyThing>()
myThing
    .MyMethod(Arg.Any<int>())
    .Returns(args => args.Arg<int>() + 1); //<-- Note access to pass arguments

在这里,args.Arg<int>()将返回调用时传递的int参数,而不必使用(int)args[0]。 如果有多个参数,则会使用索引。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接