Grails集成测试 - 如何使用不同的数据源进行不同的测试

时间:2013-12-13 20:19:59

标签: grails testing integration-testing spock env

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

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

  1. 添加一个新的测试阶段,以便我可以进行集成测试 - 内存和集成测试(使用oracle),并在不同的阶段运行不同的测试,并为不同的数据库配置每个
  2. 让每个测试控件使用哪个数据源
  3. 我更喜欢第一个作为它的清洁工,我不需要用逻辑污染我的测试来控制它使用的数据源。

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

    任何想法都会受到赞赏,如果你这样做了,请分享!我们确实使用SPOCK。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

还有一个发现。 spock有一个环境plugin,它添加了一个注释,只为注释的环境运行测试。它重用了spock的忽略测试功能,非常小巧,简单,干净。唯一的缺点是它的spock对我们这个小组来说不是问题。

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