我想访问NSubstitute Returns
方法中的实际参数。例如:
var myThing = Substitute.For<IMyThing>()
myThing.MyMethod(Arg.Any<int>).Returns(<actual parameter value> + 1)
使用NSubstitute我应该代替 <actual parameter value>
编写什么,或者我如何实现等效行为?
答案 0 :(得分:11)
根据Call information documentation
可以将对属性或方法的调用的返回值设置为 功能的结果。
var myThing = Substitute.For<IMyThing>()
myThing
.MyMethod(Arg.Any<int>())
.Returns(args => ((int)args[0]) + 1); //<-- Note access to pass arguments
lambda函数的参数将允许访问在指定的从零开始的位置传递给此调用的参数。
对于强类型的args,也可以进行以下操作。
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]
。如果有多个,则使用索引。