Java 什么&x2019;DAO单元测试期间恢复数据的策略是什么?

Java 什么&x2019;DAO单元测试期间恢复数据的策略是什么?,java,database,junit,dao,Java,Database,Junit,Dao,当我在JUnit中测试DAO模块时,一个明显的问题是:如何恢复数据库中的测试数据? 例如,在testA()和testB()两种测试方法中都应该删除一条记录,这意味着两种测试方法的前提条件都需要删除一条现有记录。然后,我的策略是在setUp()方法中插入记录以恢复数据 你最好的解决方案是什么?或者你在这种情况下的实际想法?谢谢我想创建一个名为createRecord()的方法。这也可能是一种测试方法。无论何时需要创建记录,都可以从其他测试方法中调用该方法。Bozho当然是正确的,但只需添加一点细节

当我在JUnit中测试DAO模块时,一个明显的问题是:如何恢复数据库中的测试数据? 例如,在testA()和testB()两种测试方法中都应该删除一条记录,这意味着两种测试方法的前提条件都需要删除一条现有记录。然后,我的策略是在setUp()方法中插入记录以恢复数据


你最好的解决方案是什么?或者你在这种情况下的实际想法?谢谢

我想创建一个名为
createRecord()
的方法。这也可能是一种测试方法。无论何时需要创建记录,都可以从其他测试方法中调用该方法。

Bozho当然是正确的,但只需添加一点细节:

如果可能的话,单元测试会在操作数据之前设置它们的数据,然后在处理之后进行清理。因此,理想情况下,您不会为了测试而践踏现有数据(可能是从生产中复制的),而是将一些设置作为测试的一部分;这实际上是唯一可以确保您的测试将测试您想要的内容的方法。

也许可以帮助您。
它允许在执行每个测试之前,让测试数据库处于预定义状态。一旦启动,测试数据库驱动的应用程序就很容易了。

一个简单的解决方案是在测试后回滚事务(例如在
tearDown()
)。这样,测试可以进行他们喜欢的所有更改,但不会更改数据库(不要忘记关闭连接的
autoCommit

但也有一个缺点:如果测试失败,您无法查看数据库以找出原因。因此,我的大多数测试在运行之前都会清理数据库,并使用autoCommit,这样我就可以看到上次失败的状态,对数据运行固定的SQL查询,等等