没有内存数据库的单元测试 dao 层
Posted
技术标签:
【中文标题】没有内存数据库的单元测试 dao 层【英文标题】:Unit test dao layer without in memory database 【发布时间】:2017-11-02 13:54:41 【问题描述】:有没有办法在没有像 h2 这样的内存数据库的情况下对 dao 层进行单元测试?那里的大多数示例都在内存数据库中用于 dao 调用。
【问题讨论】:
【参考方案1】:这取决于你想在那里测试什么。
如果您想验证查询执行的结果,您需要一些数据,而这需要一个物理或内存数据库。您可以使用 JDBC 连接进行普通查询或使用 Hibernate 将 EntityManager 注入您的 DAO 层,然后对其进行测试。我认为内存数据库的一个优点是我们可以准确定义将使用哪些数据,而不是依赖于可能随时间变化的物理数据库数据。
从另一个角度来看,当涉及到一些逻辑时,您可能想要检查查询的构造。为此,您不需要任何数据,Mockito 方法拦截和 ArgumentCaptor 可能有助于获取构造的(本机或 HQL)查询,然后您可以将结果与预期的查询进行比较。我见过这样一个使用 xml 属性的解决方案,它还可以作为一种文档和回归测试,以防止对合理查询的意外更改。
【讨论】:
以上是关于没有内存数据库的单元测试 dao 层的主要内容,如果未能解决你的问题,请参考以下文章
执行单元测试时如何防止dbunit生成database.script文件