使用IDEA测试Grails的最佳方法是什么?

时间:2010-05-20 09:50:28

标签: unit-testing testing grails intellij-idea integration-testing

我非常认真地使用Grails进行非常愉快的测试。我将描述我的经历,我想知道是否有更好的方法。

  1. 我测试的第一个问题是,当.save()在集成测试中失败时,Grails不会立即向开发人员提供反馈。因此,假设您有一个包含12个字段的域类,其中1个字段违反了约束,而您在创建实例时却不知道它...它只是不保存。当然,之后的测试代码将会失败。
  2. 这是最麻烦的,因为被测试的东西可能很好......真正的风险和痛苦是测试本身的设置代码。

    所以,我试图养成使用.save(failOnError:true)的习惯来避免这个问题,但这并不是每个从事该项目工作的人都可以轻松实施的......而且它有点臃肿。对于自动作为单元测试的一部分运行的代码,启用此功能会很好。

    1. 集成测试运行缓慢。我无法理解保存1个对象的1个集成测试如何运行需要15-20秒。通过一些仔细的测试计划,我已经能够获得1000个测试与实际数据库交谈并在每次测试几乎同时进行dbunit转储!这是愚蠢的。

    2. 很难在IDEA中运行所有单元测试而不是集成测试。

    3. 整合测试是一个巨大的痛苦。当集成测试失败时,Idea实际上显示了一个绿色条。 grails给出的输出表明某些事情失败了,但它并没有说出它是什么。它说要查看测试报告......这会迫使开发人员启动他们的文件系统来查找愚蠢的html文件。多么痛苦。

    4. 然后,一旦你获得了html文件并点击了失败的测试,它就会告诉你一个行号。由于这些报告不在IDE中,因此您不能单击堆栈跟踪转到该行代码...您必须自己回去查找。 ARGGH!@!@!

      也许人们忍受这个,但我拒绝。测试不应该是这种痛苦。它应该是快速和无痛的,否则人们就不会这样做。

      请帮忙。解决办法是什么? Rails而不是Grails?还有别的吗?我喜欢Grails框架,但他们从来没有演示过他们的测试。他们有一个时髦的框架,但测试很痛苦。

      在过去的1.5个月中使用过Scala,并且被ScalaTest完全宠坏了......我不能再回到原点了。

1 个答案:

答案 0 :(得分:2)

您可以在配置文件中设置此属性:

grails.gorm.failOnError=true

这将使它成为系统范围的保存默认值(如果需要,可以使用.save(failOnError:false)覆盖)。

如果您只想在测试中使用此行为,则可以将其放在Config.groovy中的特定于环境的节中。我实际上将此视为项目范围的行为。

我确信你可以在定义的范围内打开/关闭failOnError,但我还没有调查过如何做到这一点(可能是一篇很好的博客文章,如果我写的话,我会更新它一个)。

我不确定你在IDEA中错误配置了什么,但是当我的测试失败时它会显示一个红色条,我可以点击堆栈跟踪中的行并直接解决问题。 intellij的最新版本甚至倒闭了大多数尝试修复问题时没有意义的元类错误。

如果您还没有这样做来生成项目,我会尝试擦除您现有的.ipr / .iml / .iws / .idea文件并运行此命令让grails重新生成您的配置:

grails integrate-with --intellij

然后运行生成的.ipr文件。