我一直在尝试实现单元测试,目前有一些代码可以执行以下操作:
查询外部数据库,加载到feed表中
查询视图,这是我的订阅源和数据表的增量,更新数据表以匹配订阅源表
我的单元测试策略是这样的:
我有一个测试数据库,我可以随意操作.
在setUP()中,将一些数据加载到我的测试数据库中
运行我的代码,使用我的测试数据库作为源
检查数据表,检查计数和某些记录的存在/不存在
清除测试数据库,加载不同的数据集
再次运行代码
再次检查数据表
显然,我将数据集加载到源数据库设置中,这样我就知道应该添加,删除,更新某些记录等.
看起来这有点麻烦,应该有一个更简单的方法吗?有什么建议?
您是否打算测试生成增量的视图,或者测试代码是否正确添加,删除和更新以响应视图?
如果要测试视图,可以使用DBUnit等工具使用各种数据填充Feed和数据表,这些数据的汇总值是您手动计算的.然后,对于每个测试,您将验证视图是否返回匹配集.
如果你想测试你的代码如何响应视图检测到的差异,我会尝试抽象出数据库访问.我想象一个java方法,你可以传递一个结果集(或POJO/DTO列表)并返回一个参数对象数组列表(再次,或POJO),以便添加.其他方法将解析差异列表以删除和更新项目.然后,您可以创建模拟结果集或pojo,将它们传递给您的代码并验证是否返回了正确的参数.所有没有触及数据库.
我认为关键是将您的流程分解为多个部分,并尽可能独立地测试每个部分.
DbUnit将满足您的需求.需要注意的一点是,他们已经转而使用SLF4J作为他们的日志外观而不是JCL.您可以配置SLF4J以将日志记录转发到JCL,但是如果您在默认情况下在其Nop日志提供程序中使用Maven DbUnit,则会收到警告,因此您必须使用排除项,我最近在博客中讨论了此冲突.