使用JUnit查询数据库的测试方法

时间:2012-07-16 16:58:04

标签: java unit-testing testing mocking

我应该如何测试他们的意图是查询数据库并返回一些数据?对于其他情况,我可以只是模拟对象,但在这种情况下,我想测试它们是否返回正确的数据,我应该如何检查它与数据库隔离?我应该使用某种特殊的数据库吗?但是,我应该如何配置新的数据库与所有这些列的其他数据库一样工作?

感谢。

更新:感谢大家,他们的回答让我走上了正确的道路。我终于使用了debry。我刚为此添加了一个新的persistence.xml。没有其他重大变化,现在似乎正在发挥作用。

3 个答案:

答案 0 :(得分:3)

我成功使用的一种方法是使用:

  1. Maven来构建您的项目
  2. Liquibase(或Flyway)管理您的数据库架构并对其进行版本化
  3. H2作为与测试一起启动的内存数据库。
  4. 如果您没有使用上述任何一项,那么可以在那里学到很多东西,但根据我的经验,这是值得的。这适用于Spring应用程序;与其他设置相比,您的里程可能会有所不同。

    Maven应该在进行任何测试之前在内存中启动H2数据库的实例。在Spring应用程序中,您只需使用H2 JDBC URL指定数据源,它就会自动启动。

    您可以使用Liquibase运行一组XML脚本来设置数据库模式,然后使用单独的文件用测试数据填充它们(通过在运行Liquibase时指定不同的文件,或使用{{1}每个context的属性。这可以使用Maven完成,也可以使用特定的Liquibase bean在Spring中完成。

    从那里你可以测试你的应用程序,就像它是一个普通的应用程序一样。不需要嘲笑,因此您可以获得更多有用的测试。您可能需要更改模式或以其他方式解决H2与本机RDBMS之间的SQL差异。

    顺便说一句,我非常赞成这些类型的测试。根据我的经验,嘲笑所有内容并没有真正获得任何有趣的见解,并且应该是无法在内部构建集成测试时的最后手段。有很多人不同意我的看法!

答案 1 :(得分:1)

您可以使用DBUnit。它采用您当前的架构,您可以轻松地模拟您的数据。

答案 2 :(得分:1)

问题是您需要进行单元测试的行为?如果你嘲笑了数据库,那么你已经测试了所有重要的逻辑。您的数据库适配器将工作或不工作,您可以在针对真实数据库的集成/验收测试中验证。