2010-04-06 66 views
2

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

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

回答

1

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

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

+0

'回滚'解决方案很酷! – 2010-04-07 05:01:16

2

我会做一个方法createRecord()。它也可能是一种测试方法。无论何时您需要创建记录,请从其他测试方法调用该方法。

1

Bozho是正确的,当然,但我想补充一点细节:

如果可能的话,单元测试操作之前,建立自己的数据,再经过自己清理。因此,理想情况下,您不会对现有数据(可能是从生产中复制)进行测试,而是将某些数据设置为测试的一部分;这实际上是唯一可以确保您的测试将测试您的目标的唯一方法。

2

也许DBUnit可以帮助你。 它允许在执行每个测试之前使TEST数据库处于预定义的状态。一旦建立起来,测试数据库驱动的应用程序真的很容易。

相关问题