【问题标题】:NSubstitute method called multiple times with specific sequence of args?NSubstitute 方法使用特定的 args 序列多次调用?
【发布时间】: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


【解决方案1】:

来自以上comment

NSubstitute API 没有执行此操作的方法。对我来说,foreach 方法是最清晰的;它准确地显示了测试成功的预期。如果你经常需要它,你可以编写一个方法来打包这个逻辑,但是虽然它可能使它更简洁一点,但我认为它不会让它更清晰。

【讨论】:

    猜你喜欢
    • 2021-06-02
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多