Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing 测试数据访问持久化方法_Unit Testing_Tdd_Data Access Layer - Fatal编程技术网

Unit testing 测试数据访问持久化方法

Unit testing 测试数据访问持久化方法,unit-testing,tdd,data-access-layer,Unit Testing,Tdd,Data Access Layer,只是想知道是否有人对如何测试自己的数据访问方法有什么想法。我发现测试检索数据访问方法要容易得多,因为我可以模拟ExecuteReader并返回一个填充的dataTable.CreateDataReader()。通过这样做,我可以测试在返回结果集时我的对象是否正确填充 但是如何将其转换为持久化方法(即添加、更新、删除等)。我想测试的是它是否正确地填充了命令参数,等等 有什么想法吗? 干杯嘲笑是一种方式。使用类似的工具,您可以向数据访问类提供模拟连接(例如IDbConnection),并测试由连接创

只是想知道是否有人对如何测试自己的数据访问方法有什么想法。我发现测试检索数据访问方法要容易得多,因为我可以模拟
ExecuteReader
并返回一个填充的
dataTable.CreateDataReader()
。通过这样做,我可以测试在返回结果集时我的对象是否正确填充

但是如何将其转换为持久化方法(即添加、更新、删除等)。我想测试的是它是否正确地填充了命令参数,等等

有什么想法吗?
干杯

嘲笑是一种方式。使用类似的工具,您可以向数据访问类提供模拟连接(例如IDbConnection),并测试由连接创建的命令是否正确设置了参数


不久前我写了一篇博文(请参阅),描述了一种模拟对IDbCommand.CreateParameter连续调用的方法。设置模拟参数后,您可以验证其值和ParameterName属性是否已设置。

我们使用内存中的db(hsql)进行单元测试。安装程序启动事务,拆卸程序将其回滚。然后,您就可以在单元测试中始终了解数据库的状态。

对于我们的o/r映射器框架LLBLGen Pro,我们使用专门的数据库进行测试,并针对每组功能使用不同的测试项目。所以我们有一个用于插入/更新的特殊数据库,例如,一个用于测试继承相关操作的特殊数据库,一个用于大型集合的特殊数据库,一个用于获取的特殊数据库。除此之外,我们还将不同项目中的单元测试分离开来:面向获取、面向linq提供程序、面向插入/更新/删除、面向内存中的内容等

这样,测试是可维护的,不会相互影响。有了这些特殊的数据库,我们知道该期待什么,该做什么

当然,这还取决于您对持久性逻辑测试的含义:如果您想像我们一样测试框架级例程,那么模拟就不是那么有用了:您想在场景中测试真正的交易,它涵盖了大多数(如果不是全部的话)案例。如果您真的在谈论使用框架级代码(例如,您的存储库代码)测试代码,那么模拟可以有所帮助,只要使用的框架当然是无错误的。:)