rahulaga-msft
rahulaga-msft

Reputation: 4154

How to use Nsubstitue for method with different arguments and return values?

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

Answers (1)

pfx
pfx

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

Related Questions