【发布时间】:2016-05-15 16:30:34
【问题描述】:
我正在使用 JPA 将我的 java 对象存储在使用 javadb 的数据库中。
现在我已经编写了 JUnit 测试来检查对象是否从 javadb 中正确存储和删除等。
问题在于,在之前的测试中对数据库的修改会影响以后的测试,更重要的是,显然会修改我用于我的应用程序的数据库。
我发现的一个解决方案是为每个测试反转事务,但由于我正在测试的几种方法已经提交了它们的事务,我认为这对我不起作用。
我还考虑通过将所有数据存储在文件中并在之后恢复数据库来创建备份,或者使用不同的 jdbc.url 值创建创建的 persistence.xml(在我运行测试时会以某种方式使用)而不是原来的)并创建一个单独的数据库。
但我不知道如何使这些解决方案发挥作用,或者它们是否是好的解决方案。
那么任何人都可以向我解释如何在运行这些测试时准确地避免修改原始数据库吗?
【问题讨论】:
-
是否对被测代码进行修改以使该代码无法提交?这将允许测试决定是提交还是回滚。
-
我建议有一个单独的测试数据库。您可以使用 DBUnit 之类的东西为每个测试填充相关数据。 dbunit.sourceforge.net
-
可能是没有其他方法可以实现这一点,但我实际上正在测试一个抽象(由此类实现的接口),并且真的不希望改变方法的作用。跨度>