在每个集成测试用例之后丢弃数据库是一个好主意吗?

时间:2015-02-17 09:40:36

标签: grails testing tdd integration-testing grails-2.0

我们使用Grails作为我们的Web框架,我们有集成测试,我们想要隔离。提出的一个想法是在每个测试用例之后删除数据库。什么是实现测试隔离的替代和更适用的方法。

2 个答案:

答案 0 :(得分:2)

我们做了两件事:

  1. 回滚事务。这涉及大多数问题(DML)但不是全部(例如序列)。有时您需要提交一些事务来进行适当的测试。这就是为什么我们:
  2. 重置数据库。您可以通过多种方式实现它:使用清除数据的框架(db-unit),手动恢复插入的数据,删除db或者像我们一样截断所有表并运行自定义脚本(如果需要重置序列或其他东西)其他)。它比删除和重新创建数据库要快得多。它有效真的

答案 1 :(得分:1)

你可能不需要那些具有攻击性的东西。每个集成测试都在一个在测试结束时回滚的事务中运行,因此您不应该看到以前测试中的任何内容。在某些情况下,您希望提交事务,因此您可以自行禁用自动事务和回滚并管理事务。这将增加测试之间数据污染的可能性,但它很容易修复。

由于数据库最初是在内存中,因此删除整个数据库并重新创建所有表和对象的成本相对较低,但如果移动到“真实”数据库,例如,这将会非常慢。 Postgres的本地安装,以确保测试的运行尽可能接近代码在生产中的运行方式。