【发布时间】:2019-09-20 14:44:24
【问题描述】:
我想检查一个特定的方法是否被调用了 N 次,首先是 arg x1,然后是 x2,然后是 x3,等等,最后是 arg xN。我知道可以这样做:
Received.InOrder(() => {
subst.MyMethod(x1);
subst.MyMethod(x2);
subst.MyMethod(x3);
// ...
subst.MyMethod(xN);
});
但它可以以某种方式完成吗?简单地列出参数序列?
类似这样的东西(概念):
int[] args = {x1, x2, x3, /*...*/ xN};
subst.Received(N).MyMethod(Arg.Is(args));
这是InOrder 的实现,但我认为这是一种解决方法:
int[] args = {x1, x2, x3, /*...*/ xN};
Received.InOrder(() => {
foreach (int i in args)
subst.MyMethod(i);
});
【问题讨论】:
-
我以前做过类似的事情,但使用
Queue<T>和queue.Dequeue() -
NSubstitute API 没有执行此操作的方法。对我来说
foreach方法是最清楚的;它准确地显示了测试成功的预期。如果您经常需要它,您可以编写一个方法来打包此逻辑,但是虽然它可能会使它更简洁一点,但我认为它不会使它更清晰。 -
@DavidTchepak 谢谢!这几乎解决了这个问题,我对
foreach方法很满意。它已经在我的单元测试中到位。随意写它作为答案,我会这样标记它。
标签: c# mocking nsubstitute