我需要使用 Moq 模拟对 IDataReader.GetValues(array) 的调用。GetValues 方法应使用 DataReader 中当前行的值填充“数组”并返回数据读取器字段计数。
这是我的模拟设置:
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);
...这是正在测试的代码(“_reader”是 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
}
...
在上面的代码中,result == 2(好的模拟设置正在工作)但“值”永远不会被填充!
如何设置 Mock 对象以填充“值”数组?