我正在开发一个测试不同WebServices的应用程序,我希望它尽可能通用。我需要填充数据库来进行JUnit测试,但我不希望提交这些更改。 我知道一些像HSQL DB这样的内存数据库允许在某种虚拟(或模拟)数据库上进行测试,但遗憾的是我使用oracle而且由于我复杂的数据表结构,我现在无法改变它。
你建议的最佳做法是什么? 感谢。
答案 0 :(得分:1)
首先,HSQL和Hibernate没有任何关联。问题是,您是否可以找到支持与生产数据库相同的SQL的嵌入式数据库(或者更确切地说是应用程序使用的SQL子集)。
一个很好的候选者是H2 database,因为它模仿了很多不同的SQL风格。
最重要的是:不要测试数据库。假设您的供应商对数据库进行了彻底测试,并且正常工作。
在我的代码中,我的目标是:
保存并加载每个实体。
为我使用的所有查询生成SQL,并将它们与测试中的字符串文字进行比较(即我不会一直对数据库运行查询)。
某些测试会查找System属性。如果已设置,则它们将对数据库运行查询。这在我的CI服务器上发生。
这个的基本原理:只要数据库架构没有改变,就没有必要实际运行查询。这意味着白天在我坐在电脑前运行它们是一个巨大的浪费时间。
为了确保“低影响”的变化不会漏掉,我让计算机在我不在乎时运行它们。
同样,我有许多DAO的模拟,它返回各种预定义的结果,所以我不必查询数据库。这里的基本原理是我想测试数据库结果的处理,而不是JDBC API,数据库驱动程序,操作系统的TCP / IP堆栈,网络硬件(和软件),或者我之间的1000件事。代码和某个硬盘上的数据库记录。
我博客中的更多详情:http://blog.pdark.de/2008/07/26/testing-with-databases/