Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在不修改原始数据库的情况下使用javadb对jpa代码进行JUnit测试?_Java_Jpa_Junit - Fatal编程技术网

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

如何在不修改原始数据库的情况下使用javadb对jpa代码进行JUnit测试?,java,jpa,junit,Java,Jpa,Junit,我使用JPA将java对象存储在使用javadb的数据库中 现在,我已经编写了JUnit测试,以检查对象是否正确存储并从javadb中删除等 问题是,在以前的测试中对数据库的修改会影响以后的测试,而且更重要的是,显然会修改我在应用程序中使用的数据库 我发现的一个解决方案是为每个测试反转事务,但是由于我正在测试的几个方法已经提交了它们的事务,我认为这对我来说不起作用 我还考虑过创建一个备份,将所有数据存储在一个文件中,然后恢复数据库,或者创建一个具有不同jdbc.url值的persistence.

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

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

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

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

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

但我不知道如何使这些解决方案中的任何一个有效,或者它们是否是好的解决方案


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

我最终使用了maven和一个单独的persistence.xml,它配置了一个不同的javadb数据库,完全用于运行测试


由于时间限制,我没有按照建议使用DBUnit,但这似乎也是一个有效的选项。

对测试中的代码进行修改以使该代码不进行提交是否可以接受?这将允许测试决定是提交还是回滚。我建议使用单独的测试数据库。您可以使用类似DBUnit的东西来为每个测试填充相关数据。如果没有其他方法来实现这一点,可能是这样的,但我实际上是在一个抽象(由这个类实现的接口)上进行测试,并且不希望更改这些方法的功能。