将IDataReader转换为SQLDataReader
本文关键字:SQLDataReader 转换 IDataReader | 更新日期: 2023-09-27 18:11:14
有办法将IDataReader
对象转换为SqlDataReader
对象吗?我试图通过使用我自己的IDataReader
拦截SqlHelper
(因为我不能创建SqlDataReader
对象(来打破对API之一的数据库依赖。
这就是我的测试用例(以及评估TypeMock(的样子:
Isolate.Fake.StaticMethods(typeof(SqlHelper));
Isolate.WhenCalled(() => SqlHelper.ExecuteReader(string.Empty, CommandType.StoredProcedure, string.Empty))
.WillReturn(myDataGenerator.ToDataReader() as SqlDataReader);
编译后不会出现任何问题,但不会返回任何行。当我调试时,我看到它根本没有任何行。有什么想法吗?
提前谢谢。
编辑(1(:由于转换是不可能的,是否可以模拟SqlDataReader。
否,不能将IDataReader
转换为SqlDataReader
。SqlDataReader
是IDataReader
——SqlDataReader
可以转换为IDataReader
,而不是相反。
你真正的问题是你的代码不是为了可测试而写的。实际上SqlHelper
应该是一个实例类,它被传入并可以被模拟并返回一个IDataReader
。或者,您正在测试的一个或多个方法可以进行重构,这样它们就不会直接依赖于SqlHelper
而采用IDataReader
。
但是,如果我怀疑您不能控制这段代码,您可以创建自己的DataReader,它继承自SqlDataReader
。所有的IDataReader
方法都是虚拟的,所以你可以自己覆盖它们。
那么您的SqlHelper.ExecuteReader应该返回SqlDataReader吗?为什么不让SqlHelper.ExecuteReader使用IDataReader呢。
shf301的答案刚刚发布,写得比我的好,但这正是你需要知道的。