2013-08-21 57 views
1

我有以下接口:如何用NSubstitute模拟一个带数组参数的方法?

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

我想创建实施IText这台array[index]='f'array[index+1]='o'array[index+2]='o'模仿对象时CopyTo被调用。

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

+0

注:'IText'必须是公共使用NSubstitute和其他基于代理的动态嘲讽库来代替。 –

+0

@DavidTchepak:或者使用[assembly:InternalsVisibleTo(“DynamicProxyGenAssembly2”)] – cm007

回答

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... 
    }); 
相关问题