首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >模拟IDataReader扩展方法

模拟IDataReader扩展方法
EN

Stack Overflow用户
提问于 2016-05-18 07:12:22
回答 1查看 859关注 0票数 2

我正在考虑在IDataReader上模拟一个扩展方法(在项目中使用)。当调用ReadAll() (下面)时,我想返回一个测试数据收集。

代码语言:javascript
复制
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()方法,

代码语言:javascript
复制
int count = -1;
var testData = ReadData(); //Custom collection
DataReaderInfoMock.Setup(x => x.DataReader.Read()).Returns(() => count < testData.Count() - 1).Callback(() => count++);

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

我能测试一下吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-18 07:36:25

您不能模拟扩展方法,但是可以编写自己的IDataReader实现作为模拟。

就像这样(我只编写了您需要的方法,IDataReader还有更多):

代码语言:javascript
复制
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;
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37292594

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档