1

我有以下界面:

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

我想创建一个模拟对象,实现IText哪个集合array[index]='f', array[index+1]='o', array[index+2]='o'whenCopyTo被调用。

NSubstitute 可以做到这一点吗?如果是这样,怎么做?

4

1 回答 1

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...
    });
于 2013-08-22T22:33:56.560 回答