我有以下界面:
interface IText
{
void CopyTo(char[] array, int index);
}
我想创建一个实现IText
的模拟对象,在调用array[index]='f'
时设置array[index+1]='o'
,array[index+2]='o'
,CopyTo
。
NSubstitute可以吗?如果是这样,怎么样?
答案 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...
});