JUnit数据库测试和测试排序

时间:2012-04-06 03:12:47

标签: junit database-testing

我认为数据库测试通常包括CRUD操作。因此,这些函数会修改数据库,从而使预期的值发生变化:例如。如果我测试SELECT返回2行,如果删除测试运行1st,我可能会失败。与INSERT类似。 JUnit似乎不会在定义时运行测试,从而使预期值变得困难。

如果我在每次测试时重新初始化我的数据库,那么它可能会过度而且速度过慢。那么我怎么能解决这个问题呢?

3 个答案:

答案 0 :(得分:3)

是的,正如Steve Hall所指出的那样,使用事务测试可以解决测试和测试运行之间100%的数据库一致性问题。 Spring为这类测试提供了非常精细的支持(参见transaction management in TestContext Framework),但没有它就没那么难实现。

在最终回滚事务的内部事务测试中,只要它们是测试启动的事务的一部分,您就可以自由地对数据应用任何CRUD操作。然后在测试拆除期间进行单次回滚,消除了对数据库的所有CRUD影响。

答案 1 :(得分:1)

您可能希望查看DBUnit之类的内容。如果这不符合您的需求,那么您可以尝试将测试包装在数据库事务中。您可以使用setupteardown方法来启动和回滚您的交易。

答案 2 :(得分:0)

您的单元测试不应该依赖于顺序,但对于单元级测试,您通常不应该使用真正的数据库。您应该使用类似DBUnit的东西来模拟数据库,或者如果您的数据库隐藏在服务层接口后面,请为此创建一个模拟。