模拟IDataReader扩展方法

时间:2016-05-18 07:12:22

标签: c# unit-testing

我想在 <?xml version="1.0" encoding="utf-8"?> <configuration> <startup useLegacyV2RuntimeActivationPolicy="true"> //useLegacyV2RuntimeActivationPolicy for older .net version <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/> </startup> </configuration> 上模拟一个扩展方法(在项目中使用)。我希望在调用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++); 块下模拟实现的方法。

有什么方法可以测试吗?

1 个答案:

答案 0 :(得分:2)

您无法模拟扩展方法,但您可以编写自己的IDataReader实现以用作模拟。

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

{{1}}