2

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

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

有任何想法吗?干杯

4

3 回答 3

1

嘲笑是要走的路。使用Moq之类的东西,您可以为数据访问类提供模拟连接(例如 IDbConnection),并测试连接创建的命令是否正确设置了参数。

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

于 2008-12-24T06:52:59.610 回答
1

我们使用内存数据库(hsql)进行单元测试。设置启动事务,而拆解将其回滚。然后你总是知道单元测试中数据库的状态。

于 2008-12-24T07:09:55.083 回答
1

对于我们的 o/r 映射器框架 LLBLGen Pro,我们使用专门的数据库进行测试,并为每组功能使用不同的测试项目。所以我们有一个用于插入/更新的特殊数据库,例如一个用于测试继承相关操作的特殊数据库、一个用于大集合的特殊数据库、一个用于获取的特殊数据库。最重要的是,我们在不同的项目中分离了单元测试:面向获取、面向 linq 提供者、面向插入/更新/删除、面向内存中的东西等。

这样,测试是可维护的并且不会相互影响。借助特殊的数据库,我们知道会发生什么以及该做什么。

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

于 2008-12-24T08:42:43.790 回答