没有内存数据库的单元测试 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 层的主要内容,如果未能解决你的问题,请参考以下文章

使用 H2 数据库对 DAO 层进行单元测试

如何在 Java 中对 DAO 应用单元测试

spring mvc中的单元测试

执行单元测试时如何防止dbunit生成database.script文件

出于单元测试的目的,哪个内存 Java 数据库最接近 MySQL 和 SqlServer?

Android 应用测试 - 如何使用真实数据库测试 DAO 层?