如何模拟IDataReader.GetValues()?

时间:2013-03-28 18:04:56

标签: unit-testing moq

我需要使用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;阵列

1 个答案:

答案 0 :(得分:0)

因为上面的代码中data为空。在第一个实例中创建object[]时,您需要填充它,或者当您模拟对IDataReader.GetValues

的调用时,它不会包含任何内容