如何将 Nsubstitue 用于具有不同参数和 return 值的方法?

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

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

IRepo RepoSub = Substitute.For<IRepo>();
Order ord = new Order{/*...*/}
RepoSub.GetOrder(Arg.Is<int>(123)).ReturnsForAnyArgs(ord);

然而,我正在测试的 BL 方法使用 Repository 作为数组中的多个订单 ID 作为 i/p 参数传递给该 BL 方法 (int[] orderIds)。我不确定如何将 NSubstitue 用于 RepoSub GetOrder 中的不同参数。我尝试在 Nsubstitue 文档中找出答案,但没有成功。

感谢任何帮助。谢谢!!

为了改变 Order return 值,您必须将 stub/mock 配置为 return 每个单独的 Order 众所周知的实例 orderId值。

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