将IDataReader转换为SQLDataReader

时间:2011-10-15 02:01:22

标签: c# nunit typemock

有没有办法将IDataReader对象转换为SqlDataReader对象?我试图通过使用我自己的SqlHelper拦截IDataReader来破坏数据库依赖关系到API之一(因为我无法创建SqlDataReader对象)。

这是我的测试用例的样子(并评估TypeMock):

Isolate.Fake.StaticMethods(typeof(SqlHelper));
Isolate.WhenCalled(() => SqlHelper.ExecuteReader(string.Empty, CommandType.StoredProcedure, string.Empty))
     .WillReturn(myDataGenerator.ToDataReader() as SqlDataReader);

这个编译没有问题,但不返回任何行。当我调试时,我发现它根本没有任何行。有什么想法吗?

提前致谢。

修改(1): 由于无法进行转换,因此可以模拟SqlDataReader。

2 个答案:

答案 0 :(得分:1)

不,您无法将IDataReader转换为SqlDataReaderSqlDataReader is a IDataReader - SqlDataReader可以转换为IDataReader而非其他方式。

您真正的问题是您的代码编写不可测试。实际上SqlHelper应该是传入的实例类,可以进行模拟并返回IDataReader。或者您正在测试的方法或方法可以重构,因此它们不依赖于SqlHelper direclty并取IDataReader个。

但是,如果我怀疑您不控制此代码,则可以创建自己的继承自SqlDataReader的DataReader。所有IDataReader方法都是虚拟的,因此您可以自己覆盖它们。

答案 1 :(得分:0)

那么你的SqlHelper.ExecuteReader应该返回一个SqlDataReader?你为什么不让你的SqlHelper.ExecuteReader使用IDataReader。

shf301的答案刚刚发布,写的比我的好,但正是你需要知道的。