Reputation: 4154
For unit testing I am using NSubstitue
to stub my repository method (say IRepo.GetOrder(orderId)
) I am able to stub this for one specific argument like :
IRepo RepoSub = Substitute.For<IRepo>();
Order ord = new Order{/*...*/}
RepoSub.GetOrder(Arg.Is<int>(123)).ReturnsForAnyArgs(ord);
However BL method I am testing makes use of Repository
for multiple Order Ids in array passed as an i/p parameter to that BL method (int[] orderIds
). I am not sure how can I use NSubstitue
for varying arguments in RepoSub
GetOrder
. I tried figuring out in Nsubstitue document, but no luck.
Any help appreciated. Thanks!!
Upvotes: 0
Views: 1496
Reputation: 23214
In order to vary the Order
return value, you have to configure your stub/mock to return a wellknown Order
instance for each separate orderId
value.
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
Upvotes: 2