我需要使用Moq模拟对IDataReader.GetValues(数组)的调用。 GetValues方法应该填充" array"使用DataReader中当前行的值并返回数据读取器字段计数。
这是我的Mock设置:
var data = new object[] { };
var reader = new Mock<IDataReader>();
reader.Setup(r => r.GetValues(data)).Callback<object[]>(d => {
Array.Resize(ref d, 2);
d[0] = "value 1";
d[1] = "value 2";
}).Returns(2);
...这是正在测试的代码(&#34; _reader&#34;是Mock对象):
public int GetValues(object[] values)
{
int result = _reader.GetValues(values);
for (int i = 0; i < values.Length; i++)
{
// this is not executed because values.Length == 0
}
...
在上面的代码中,结果== 2(确定模拟设置正常)但是&#34;值&#34;永远不会被填充!
如何设置Mock对象以填充&#34;值&#34;阵列
答案 0 :(得分:0)
因为上面的代码中data
为空。在第一个实例中创建object[]
时,您需要填充它,或者当您模拟对IDataReader.GetValues