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

Grails集成测试-如何为不同的测试使用不同的数据源,grails,testing,integration-testing,spock,env,Grails,Testing,Integration Testing,Spock,Env,我正试图找出一种方法,对内存中的DB(H2)执行某些集成测试,对Oracle测试DB执行其他集成测试。也许这是我有限的测试编写经验,但似乎有些测试(如搜索查询)更适合在内存中进行,因为我可以控制查询的数据集,而其他测试(如测试事务/持久性)则会受益于与实际模式和DB(Oracle)相反的测试 我可以想到两种方法,但不知道如何实施: 添加一个新的测试阶段,这样我就可以在mem中进行集成测试和集成测试(使用oracle),在不同的阶段运行不同的测试,并为不同的DB配置每个测试 让每个测试控制使用哪个

我正试图找出一种方法,对内存中的DB(H2)执行某些集成测试,对Oracle测试DB执行其他集成测试。也许这是我有限的测试编写经验,但似乎有些测试(如搜索查询)更适合在内存中进行,因为我可以控制查询的数据集,而其他测试(如测试事务/持久性)则会受益于与实际模式和DB(Oracle)相反的测试

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

  • 添加一个新的测试阶段,这样我就可以在mem中进行集成测试和集成测试(使用oracle),在不同的阶段运行不同的测试,并为不同的DB配置每个测试
  • 让每个测试控制使用哪个数据源
  • 我更喜欢第一个,因为它更干净,而且我不必用逻辑来控制它使用的数据源而污染我的测试

    另外,第二个不是简单地按域设置不同的数据源——我希望在针对不同DBs的不同测试中重用同一个域


    如果您有任何想法,请分享!我们确实使用SPOCK。

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

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

    一种更简单的定义阶段的方法会更好——比如命名约定。如果能够用一个目录命名约定(如test/)来定义阶段/类型,那就太好了。只要创建文件夹就可以了。然后,您可以在运行测试应用程序时通过在args中显式设置phase/type/env来控制执行