如何在不修改原始数据库的情况下使用javadb对jpa代码进行JUnit测试



我使用JPA将java对象存储在使用javadb的数据库中。

现在,我已经编写了JUnit测试来检查对象是否正确存储和从javadb中删除等。

问题是,在以前的测试中对数据库的修改会影响以后的测试,更重要的是,显然会修改我用于应用程序的数据库。

我发现的一个解决方案是为每个测试反转事务,但由于我正在测试的几个方法已经提交了它们的事务,我认为这对我不起作用

我还考虑过创建一个备份,将所有数据存储在一个文件中,然后恢复数据库,或者创建一个创建的具有不同jdbc.url值的persistence.xml(当我运行测试而不是原始测试时,会以某种方式使用该值),然后创建一个单独的数据库。

但我不知道如何使这些解决方案发挥作用,也不知道它们是否是好的解决方案。

那么,有人能向我解释一下,在运行这些测试时,如何避免对原始数据库进行修改吗?

我最终只使用了带有单独persistence.xml的maven,该文件配置了一个不同的javadb数据库,纯粹用于运行测试,如下所述。

由于时间限制,我没有像Alan Hay的评论所建议的那样使用DBUnit,但这似乎也是一个有效的选择。