繁体   English   中英

Grails集成测试-如何将不同的数据源用于不同的测试

[英]Grails integration test - how to use different datasources for different test

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

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

  1. 添加一个新的测试阶段,以便可以进行memory-test-in-mem和integration-test(使用oracle),并在不同阶段运行不同的测试,并为不同的数据库配置每个测试
  2. 每个测试控制使用哪个数据源

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

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

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

这是我发现的关于添加Luke Daley的自定义测试阶段/类型的博客文章 有人实施过吗? 现在,我已经阅读并理解了术语,我想我想做的是建立新的类型-而不是阶段。 不幸的是,尽管由于我们使用的是spock,所以我们基本上已经在使用自定义类型。 尽管我们可以将spock保留为两种类型之一,并可能创建“ SPOCK-IN-MEM”类型,尽管这可能需要重新定义spock类型,但这可能无法正常工作。 任何意见欢迎。 我要说的是,这种情况似乎经常出现(我在其他论坛中也曾问过这个问题),应该有一种更简单的方法来解决这个问题。

还有一个发现。 有一个用于spock的环境插件 ,它添加了一个注释,以仅对带注释的环境运行测试。 它重用了Spock的被忽略的测试功能,并且非常小,简单且干净。 唯一的缺点是对于spock而言,这对我们团队而言不是问题。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM