如何将 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
对于单元测试,我使用 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