C# 如何对具有不同参数和返回值的方法使用Nsubstitue?

C# 如何对具有不同参数和返回值的方法使用Nsubstitue?,c#,unit-testing,mocking,nsubstitute,C#,Unit Testing,Mocking,Nsubstitute,对于单元测试,我使用NSubstitue来存根我的存储库方法(比如IRepo.GetOrder(orderId)),我可以存根一个特定参数,如: IRepo RepoSub = Substitute.For<IRepo>(); Order ord = new Order{/*...*/} RepoSub.GetOrder(Arg.Is<int>(123)).ReturnsForAnyArgs(ord); IRepo RepoSub=Substitute.For(); O

对于单元测试,我使用
NSubstitue
来存根我的存储库方法(比如
IRepo.GetOrder(orderId)
),我可以存根一个特定参数,如:

IRepo RepoSub = Substitute.For<IRepo>();
Order ord = new Order{/*...*/}
RepoSub.GetOrder(Arg.Is<int>(123)).ReturnsForAnyArgs(ord);
IRepo RepoSub=Substitute.For();
Order ord=新订单{/*…*/}
REPORSUB.GetOrder(参数Is(123)).REPORTSFORANYARGS(ord);
然而,我正在测试的BL方法将
存储库
用于数组中作为I/p参数传递给该BL方法的多个订单ID(
int[]orderID
)。我不确定如何使用
NSubstitue
来处理
RepoSub
GetOrder
中的各种参数。我试着在Nsubstitue文档中找出答案,但没有成功


谢谢你的帮助。谢谢

为了改变
订单
返回值,您必须配置存根/模拟,以便为每个单独的
订单ID
值返回一个众所周知的
订单
实例

var order1 = new Order { Id = 1 };
var order2 = new Order { Id = 2 };
var order3 = new Order { Id = 3 };
IRepo repoSub = Substitute.For<IRepo>();

repoSub.GetOrder(1).Returns(order1);
repoSub.GetOrder(2).Returns(order2);
repoSub.GetOrder(3).Returns(order3);

var o3 = repoSub.GetOrder(3); // order3
var o2 = repoSub.GetOrder(2); // order2
var o1 = repoSub.GetOrder(1); // order1
var order1=新订单{Id=1};
var order2=新订单{Id=2};
var order3=新订单{Id=3};
IRepo repoSub=替换为();
repoSub.GetOrder(1).Returns(order1);
repoSub.GetOrder(2).返回(order2);
repoSub.GetOrder(3).Returns(order3);
var o3=repoSub.GetOrder(3);//订单3
var o2=repoSub.GetOrder(2);//订单2
var o1=repoSub.GetOrder(1);//订单1

为了改变
订单
返回值,您必须配置存根/模拟,以便为每个单独的
订单ID
值返回众所周知的
订单
实例

var order1 = new Order { Id = 1 };
var order2 = new Order { Id = 2 };
var order3 = new Order { Id = 3 };
IRepo repoSub = Substitute.For<IRepo>();

repoSub.GetOrder(1).Returns(order1);
repoSub.GetOrder(2).Returns(order2);
repoSub.GetOrder(3).Returns(order3);

var o3 = repoSub.GetOrder(3); // order3
var o2 = repoSub.GetOrder(2); // order2
var o1 = repoSub.GetOrder(1); // order1
var order1=新订单{Id=1};
var order2=新订单{Id=2};
var order3=新订单{Id=3};
IRepo repoSub=替换为();
repoSub.GetOrder(1).Returns(order1);
repoSub.GetOrder(2).返回(order2);
repoSub.GetOrder(3).Returns(order3);
var o3=repoSub.GetOrder(3);//订单3
var o2=repoSub.GetOrder(2);//订单2
var o1=repoSub.GetOrder(1);//订单1

我怀疑这是否有助于实际测试场景。有了这个,我可能会为所有传递的订单ID返回与i/p相同的订单,不是吗?事实上,我从问题中不清楚这一点。我更新了我的答案,以便更改返回的
订单
实例。确定。谢谢!!因此,当使用say
OrderId
1调用GetOrder时,它将返回哪个订单?谢谢,这很有效。事实上,我在原来的帖子里又犯了一个错误。我使用的不是
Return(..)
而是
ReturnsForAnyArgs(..)
我怀疑这是否有助于实际测试场景。有了这个,我可能会为所有传递的订单ID返回与i/p相同的订单,不是吗?事实上,我从问题中不清楚这一点。我更新了我的答案,以便更改返回的
订单
实例。确定。谢谢!!因此,当使用say
OrderId
1调用GetOrder时,它将返回哪个订单?谢谢,这很有效。事实上,我在原来的帖子里又犯了一个错误。我没有使用返回(…)而是使用返回分数(…)