【问题标题】:Grails integration test - how to use different datasources for different testGrails 集成测试 - 如何为不同的测试使用不同的数据源
【发布时间】:2013-12-13 20:19:59
【问题描述】:

我正在尝试找出一种方法来针对内存数据库 (H2) 执行某些集成测试,并针对我们的 Oracle 测试数据库执行其他集成测试。也许这是我有限的测试编写经验,但似乎某些测试(例如搜索查询)更适合在内存中,因为我可以控制查询的数据集,而其他测试(例如测试事务/持久性)将受益于违背我们的 REAL 模式和数据库(甲骨文)。

我可以想到两种方法,但不知道如何实现:

  1. 添加一个新的测试阶段,这样我就可以拥有 integration-test-in-mem 和 integration-test(使用 oracle),并在不同的阶段运行不同的测试,并为不同的 DB 配置每个测试
  2. 让每个测试控制使用哪个数据源

我更喜欢第一个作为它的清洁器,我不必用逻辑来污染我的测试来控制它使用哪个数据源。

另外,第二个不是简单地按域设置不同的数据源——我想在针对不同数据库的不同测试中重用相同的域。

任何想法表示赞赏,如果您这样做了,请分享!我们确实使用 SPOCK。

【问题讨论】:

    标签: grails testing integration-testing spock env


    【解决方案1】:

    这是我在 Luke Daley 添加自定义测试阶段/类型时发现的blog article。有没有人实施过这个?现在我已经阅读并更好地理解了术语,我想我想做的是设置新类型 - 而不是阶段。不幸的是,由于我们使用的是 spock,我们基本上已经在使用自定义类型。尽管我们可以将 spock 保留为 2 种类型之一,并可能创建一个“SPOCK-IN-MEM”类型,尽管这可能需要重新定义可能不起作用的 spock 类型。欢迎任何建议。我会说这似乎经常出现(我已经在其他论坛上提出过其他人提出的这个问题),应该有一种更简单的方法来解决它。

    【讨论】:

      【解决方案2】:

      还有一个发现。 spock 有一个 plugin 环境,它添加了一个注释,让测试只针对带注释的环境运行。它重用了 spock 被忽略的测试能力,并且非常小、简单、干净。唯一的缺点是它的 spock 对我们团队来说不是问题。

      定义阶段的更简单的方法会很好 - 就像命名约定一样。如果能够仅使用目录命名约定(例如 test//)来定义阶段/类型,那就太好了。只需创建文件夹即可。然后,您可以在运行 test-app 时通过在 args 中显式设置 phase/type/env 来控制执行。

      【讨论】:

        猜你喜欢
        • 2015-02-10
        • 2016-06-01
        • 2011-10-25
        • 1970-01-01
        • 2019-08-17
        • 2013-09-16
        • 2017-07-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多