如何用NSubstitute模拟一个带数组参数的方法?

时间:2013-08-21 18:22:46

标签: mocking nsubstitute

我有以下界面:

interface IText
{
    void CopyTo(char[] array, int index);
}

我想创建一个实现IText的模拟对象,在调用array[index]='f'时设置array[index+1]='o'array[index+2]='o'CopyTo

NSubstitute可以吗?如果是这样,怎么样?

1 个答案:

答案 0 :(得分:2)

强制性免责声明:这通常是不可取的。我们通常使用像IText这样的接口,因为我们不希望代码依赖于这样的实现细节,只是在合同上。在替代中实现特定行为意味着我们的测试代码与此接口的特定实现紧密耦合。相反,请尝试使用textSub.Received().CopyTo(...)检查调用代码是否正确使用了合同。

现在已经不在了,我们可以使用When..Do来设置此行为:

var text = Substitute.For<IText>();
text.WhenForAnyArgs(x => x.CopyTo(null, 0))
    .Do(x => {
          var index = x.Arg<int>();
          var array = x.Arg<char[]>();
          array[index] = 'f';
          array[index+1] = 'o';
          // etc...
    });