【问题标题】:Is it a good Idea to drop the database after every integration test case?在每个集成测试用例之后删除数据库是一个好主意吗?
【发布时间】:2015-02-17 09:40:36
【问题描述】:

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

【问题讨论】:

  • 我不使用 grails(我使用的是 .NET),但我对集成测试做了类似的事情。我为每个测试创建了一个新的 DB 文件,其名称为 GUID,这样即使在同时运行时测试也是隔离的。我通过在 RAM 磁盘上创建数据库文件并并行运行测试来加快速度,这足以满足我的需求。

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


【解决方案1】:

我们做了两件事:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-19
    • 2016-01-03
    • 2019-01-05
    • 2011-11-03
    • 2013-06-24
    • 2011-02-02
    • 2014-11-17
    • 1970-01-01
    相关资源
    最近更新 更多