在DAO单元测试期间恢复数据的策略是什么?

时间:2010-04-06 09:16:39

标签: java database junit dao

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

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

4 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

也许DBUnit可以帮到你。 它允许在执行每个测试之前使TEST数据库处于预定义状态。设置完成后,测试数据库驱动的应用程序非常容易。

答案 2 :(得分:1)

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

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

答案 3 :(得分:1)

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

但是有一个缺点:如果测试失败,你无法查看数据库以找出原因。因此,我的大多数测试在运行之前清理数据库并且使用autoCommit,因此我可以看到它失败的最后状态,对数据运行固定的SQL查询等。