0

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

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

  1. 添加一个新的测试阶段,以便我可以在内存中进行集成测试和集成测试(使用 oracle),并在不同的阶段运行不同的测试,并为不同的数据库配置每个测试
  2. 让每个测试控制使用哪个数据源

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

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

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

4

2 回答 2

0

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

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

于 2013-12-16T17:43:54.240 回答
0

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

于 2013-12-16T16:10:27.473 回答