我试图单元测试(好设计的原因)需要DbConnections做好自己的工作了几个.NET类。对于这些测试,我已经在存储器中的某些数据,得到作为输入到这些类。

这在内存中的数据可以容易地表示为一个DataTable(或包含该数据表中的数据集),但如果另一个类更合适我可以使用它。

如果我不知何故神奇地抽到的是代表到内存中的数据的连接的DbConnection,那么我可以构建我的对象,让他们执行对内存中的数据的查询,并确保其输出符合预期。 是否有某种方式获得的DbConnection在内存中的数据?我没有安装任何额外的第三方软件来实现这一目标的自由,理想情况下,我不想在测试期间触及磁盘。

有帮助吗?

解决方案

,而不是消耗的DbConnection可以消耗的IDbConnection和模拟什么?我们做同样的事情,通过模拟的数据集。 DataSet.CreateDataReader返回其自DbDataReader继承DataTableReader。

我们已经包裹的DbConnection在我们自己的IDbConnection一样的界面,这是我们已经添加了它返回一个实现了相同的接口DbDataReader类的的ExecuteReader()方法。在我们的模拟,简直的ExecuteReader返回什么DataSet.CreateDataReader担任了。

声音种类迂回的,但它是建立具有可能许多结果集数据集很不方便。我们的名字,他们代表的结果存储的特效后的数据表,并基于客户端调用PROC我们的IDbConnection模拟抓住正确的数据表。数据表还实现CreateDataReader所以我们好去。

其他提示

,我已经使用的方法是创建一个内存SQLite数据库。这可以简单地通过在System.Data.SQLite.Core NuGet包拉你的单元测试项目来完成,你不需要其他地方安装任何软件。

虽然这听起来像一个非常明显的想法,但直到我在看,我认为使用自己的技术小巧玲珑的单元测试!参见 “GetSqliteConnection” 方法

https://github.com/ StackExchange / hardy中双点净/斑点/ bffb0972a076734145d92959dabbe48422d12922 / Dapper.Tests / Tests.cs

有一点要注意的是,如果你创建一个内存中的SQLite数据库以及创建和填充表,你必须要小心,不要关闭,因为打开一个新的内存将连接进行测试查询之前的连接让你的连接的的内存数据库,的的,你只是为您精心准备的测试数据库!对于一些的测试中,我使用保持连接打开一个自定义的IDbConnection实现为了避免这一缺陷 - 比如

https://github.com/ProductiveRage/SqlProxyAndReplay/blob/主/测试/ StaysOpenSqliteConnection.cs

TypeMock? (您将需要向虽然“安装”的话)。

注意假设数据*可以给你测试适当的钩 - 它很一般的最坏情况。但是你说好设计的原因,所以我敢肯定这是所有覆盖:d

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top