我正在尝试对几个.NET类进行单元测试(出于好的设计原因)需要DbConnections来完成他们的工作.对于这些测试,我在内存中有一些数据作为这些类的输入.
内存中的数据可以很容易地表示为DataTable(或包含该DataTable的DataSet),但如果另一个类更合适,我可以使用它.
如果我以某种方式神奇地能够获得表示内存数据连接的DbConnection,那么我可以构建我的对象,让它们对内存中的数据执行查询,并确保它们的输出符合预期. 有没有办法让DbConnection到内存中的数据? 我没有自由安装任何其他第三方软件来实现这一点,理想情况下,我不想在测试期间触摸磁盘.
您可以使用IDbConnection并模拟它,而不是使用DbConnection吗?我们做类似的事情,传递模拟一个DataSet.DataSet.CreateDataReader返回一个继承自DbDataReader的DataTableReader.
我们已经将DbConnection包装在我们自己的类似IDbConnection的接口中,我们已经添加了一个ExecuteReader()方法,该方法返回一个实现与DbDataReader相同接口的类.在我们的模拟中,ExecuteReader只返回DataSet.CreateDataReader提供的内容.
听起来有点迂回,但是建立一个可能有很多结果集的DataSet非常方便.我们在存储的procs之后命名DataTables,它们代表结果,我们的IDbConnection mock根据客户端调用的proc获取正确的Datatable.DataTable还实现了CreateDataReader,所以我们很高兴.