如何模拟DataReader以进行单元测试DAL

dre*_*f17 6 c#

我的数据访问层中有一个执行映射的方法.该方法接受DataReader,并将数据映射到正确的域对象属性.有没有一种好方法以某种方式模拟DataReader所以我可以对映射方法执行单元测试而不会遇到物理数据库?

Jay*_*Jay 11

幸运的是,DataReader实现了IDataReader界面.

不要依赖DataReader代码中的a ,而是使用IDataReader.然后,在测试中,您可以替换自己的返回虚拟数据的实现,或者使用像Rhino.Mocks或类似的模拟框架来创建存根并分配返回值.

根据您DataReader在代码中"获取"的方式,您可能需要进行一些重构.你想要的是在构造函数(首选)或通过属性"注入"这样的外部依赖关系,以便类的使用者可以替换任何实现IDataReader.(这种替换也是你将参数/属性声明为抽象而不是具体类型的原因.)这称为依赖注入,一种控制反转形式.