JUnit 用于数据库代码
-
09-06-2019 - |
题
我一直在尝试实现单元测试,目前有一些代码可以执行以下操作:
- 查询外部数据库,加载到进纸表中
- 查询视图,这是我的feed和数据表的三角洲,更新数据表以匹配供稿表
我的单元测试策略是这样的:
我有一个可以自由操作的测试数据库。
- 在 setUP() 中,将一些数据加载到我的测试数据库中
- 使用我的测试数据库作为源运行我的代码
- 检查数据表,检查计数以及某些记录是否存在
- 清除测试数据库,加载不同的数据集
- 再次运行代码
- 再次检查数据表
显然,我已经将数据集加载到源数据库中,这样我就知道应该添加、删除、更新某些记录等。
看起来这个方法有点麻烦,应该有更简单的方法吧?有什么建议么?
解决方案
您的目的是测试生成增量的视图,还是测试您的代码是否正确添加、删除和更新以响应视图?
如果你想测试视图,你可以使用类似的工具 数据库单元 使用您手动计算增量的各种数据填充您的 Feed 和数据表。然后,对于每个测试,您将验证视图是否返回匹配的集合。
如果您想测试代码如何响应视图检测到的差异,我会尝试抽象数据库访问。我想象一个 java 方法,您可以向其传递结果集(或 POJO/DTO 的列表)并返回要添加的参数对象数组(再次,或 POJO 的)列表。其他方法将解析差异列表以查找要删除和更新的项目。然后,您可以创建一个模拟结果集或 pojo,将它们传递给您的代码并验证返回的参数是否正确。一切都无需接触数据库。
我认为关键是将您的流程分成几个部分,并尽可能独立地测试每个部分。
其他提示
我使用 DbUnit,但我也非常努力地工作,以避免针对数据库进行测试。针对数据库的测试应该仅出于测试数据库接口的目的而存在。因此,我有模拟数据库连接,我可以设置数据以在所有其余测试中使用。
除了已经建议的 DBUnit 之外,您可能还想研究一下 单位. 。它使用 DBUnit,但提供的还不止这些(引自该网站):
- 自动维护数据库,并支持增量,可重复和后处理脚本
- 自动禁用约束并将序列设置为最小值
- 支持 Oracle、Hsqldb、MySql、DB2、Postgresql、MsSql 和 Derby
- 简化测试数据库连接设置
- 使用 DBUnit 简单插入测试数据 * 在事务中运行测试
- JPA Entity Manager创建和冬眠,TopLink和 * Hibernate SessionFactory创建和会话的注入
- 使用数据库自动测试JPA实体 /休眠映射对象的映射
如果您使用 Maven,一种选择是使用 sql-maven-插件. 。它允许您在 Maven 构建周期中运行数据库初始化/填充脚本。
不隶属于 StackOverflow