JUnit使用模拟数据库进行测试

时间:2014-03-31 13:17:46

标签: java database web-services junit

我正在开发一个测试不同WebServices的应用程序,我希望它尽可能通用。我需要填充数据库来进行JUnit测试,但我不希望提交这些更改。 我知道一些像HSQL DB这样的内存数据库允许在某种虚拟(或模拟)数据库上进行测试,但遗憾的是我使用oracle而且由于我复杂的数据表结构,我现在无法改变它。

你建议的最佳做法是什么? 感谢。

1 个答案:

答案 0 :(得分:1)

首先,HSQL和Hibernate没有任何关联。问题是,您是否可以找到支持与生产数据库相同的SQL的嵌入式数据库(或者更确切地说是应用程序使用的SQL子集)。

一个很好的候选者是H2 database,因为它模仿了很多不同的SQL风格。

最重要的是:不要测试数据库。假设您的供应商对数据库进行了彻底测试,并且正常工作。

在我的代码中,我的目标是:

  1. 保存并加载每个实体。

  2. 为我使用的所有查询生成SQL,并将它们与测试中的字符串文字进行比较(即我不会一直对数据库运行查询)。

  3. 某些测试会查找System属性。如果已设置,则它们将对数据库运行查询。这在我的CI服务器上发生。

  4. 这个的基本原理:只要数据库架构没有改变,就没有必要实际运行查询。这意味着白天在我坐在电脑前运行它们是一个巨大的浪费时间。

    为了确保“低影响”的变化不会漏掉,我让计算机在我不在乎时运行它们。

    同样,我有许多DAO的模拟,它返回各种预定义的结果,所以我不必查询数据库。这里的基本原理是我想测试数据库结果的处理,而不是JDBC API,数据库驱动程序,操作系统的TCP / IP堆栈,网络硬件(和软件),或者我之间的1000件事。代码和某个硬盘上的数据库记录。

    我博客中的更多详情:http://blog.pdark.de/2008/07/26/testing-with-databases/