gpt4 book ai didi

c# - 模拟 IDataReader 扩展方法

转载 作者:行者123 更新时间:2023-11-30 23:25:24 24 4
gpt4 key购买 nike

我正在考虑在 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[]>收藏。我 mock 了Read()通过检查自定义集合的计数方法,

int count = -1;
var testData = ReadData(); //Custom collection
DataReaderInfoMock.Setup(x => x.DataReader.Read()).Returns(() => count < testData.Count() - 1).Callback(() => count++);

但是,我想不出在 Read() 下模拟实现的方法阻止,如果可能的话。

有什么办法可以测试吗?

最佳答案

您不能模拟扩展方法,但您可以编写自己的 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;
}
}

关于c# - 模拟 IDataReader 扩展方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37292594/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com