5

我认为数据库测试通常包含 CRUD 操作。因此,这些函数会修改数据库,使预期的值发生变化:例如。如果我测试 SELECT 返回 2 行,如果删除测试第一次运行,我可能会失败。类似于插入。JUnit 似乎没有按照定义运行测试,这使得期望值变得困难。

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

4

3 回答 3

4

是的,正如 Steve Hall 所指出的,使用事务测试可以 100% 地解决测试和测试运行之间的数据库一致性问题。Spring 为这种类型的测试提供了非常精细的支持(参见TestContext Framework 中的事务管理),但没有它实现起来并不难。

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

于 2012-04-06T04:09:40.813 回答
1

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

于 2012-04-06T03:19:53.870 回答
0

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

于 2012-04-06T03:18:58.340 回答