我正在考虑在IDataReader上模拟一个扩展方法(在项目中使用)。当调用ReadAll() (下面)时,我想返回一个测试数据收集。
public static IEnumerable<object[]> ReadAll(this IDataReader reader)
{
while (reader.Read())
{
var values = new object[reader.FieldCount];
reader.GetValues(values);
yield return values;
}
}我的目标是返回一个自定义IEnumerable<object[]>集合。我通过检查自定义集合的计数来模拟Read()方法,
int count = -1;
var testData = ReadData(); //Custom collection
DataReaderInfoMock.Setup(x => x.DataReader.Read()).Returns(() => count < testData.Count() - 1).Callback(() => count++);但是,如果可能的话,我想不出在Read()块下模拟实现的方法。
我能测试一下吗?
发布于 2016-05-18 07:36:25
您不能模拟扩展方法,但是可以编写自己的IDataReader实现作为模拟。
就像这样(我只编写了您需要的方法,IDataReader还有更多):
class MockDataReader : IDataReader
{
private List<object[]> _data;
private int _current = -1;
public MockDataReader(List<object[]> data)
{
_data = data;
}
public int FieldCount
{
get
{
return _data.FirstOrDefault()?.Length ?? 0;
}
}
public int GetValues(object[] values)
{
object[] record = _data[_current];
for (int i = 0; i < record.Length; i++)
{
values[i] = record[i];
}
return record.Length;
}
public bool Read()
{
_current++;
return _current < _data.Count;
}
}https://stackoverflow.com/questions/37292594
复制相似问题