我非常认真地使用Grails进行非常愉快的测试。我将描述我的经历,我想知道是否有更好的方法。
这是最麻烦的,因为被测试的东西可能很好......真正的风险和痛苦是测试本身的设置代码。
所以,我试图养成使用.save(failOnError:true)的习惯来避免这个问题,但这并不是每个从事该项目工作的人都可以轻松实施的......而且它有点臃肿。对于自动作为单元测试的一部分运行的代码,启用此功能会很好。
集成测试运行缓慢。我无法理解保存1个对象的1个集成测试如何运行需要15-20秒。通过一些仔细的测试计划,我已经能够获得1000个测试与实际数据库交谈并在每次测试几乎同时进行dbunit转储!这是愚蠢的。
很难在IDEA中运行所有单元测试而不是集成测试。
整合测试是一个巨大的痛苦。当集成测试失败时,Idea实际上显示了一个绿色条。 grails给出的输出表明某些事情失败了,但它并没有说出它是什么。它说要查看测试报告......这会迫使开发人员启动他们的文件系统来查找愚蠢的html文件。多么痛苦。
然后,一旦你获得了html文件并点击了失败的测试,它就会告诉你一个行号。由于这些报告不在IDE中,因此您不能单击堆栈跟踪转到该行代码...您必须自己回去查找。 ARGGH!@!@!
也许人们忍受这个,但我拒绝。测试不应该是这种痛苦。它应该是快速和无痛的,否则人们就不会这样做。
请帮忙。解决办法是什么? Rails而不是Grails?还有别的吗?我喜欢Grails框架,但他们从来没有演示过他们的测试。他们有一个时髦的框架,但测试很痛苦。
在过去的1.5个月中使用过Scala,并且被ScalaTest完全宠坏了......我不能再回到原点了。
答案 0 :(得分:2)
您可以在配置文件中设置此属性:
grails.gorm.failOnError=true
这将使它成为系统范围的保存默认值(如果需要,可以使用.save(failOnError:false)覆盖)。
如果您只想在测试中使用此行为,则可以将其放在Config.groovy中的特定于环境的节中。我实际上将此视为项目范围的行为。
我确信你可以在定义的范围内打开/关闭failOnError,但我还没有调查过如何做到这一点(可能是一篇很好的博客文章,如果我写的话,我会更新它一个)。
我不确定你在IDEA中错误配置了什么,但是当我的测试失败时它会显示一个红色条,我可以点击堆栈跟踪中的行并直接解决问题。 intellij的最新版本甚至倒闭了大多数尝试修复问题时没有意义的元类错误。
如果您还没有这样做来生成项目,我会尝试擦除您现有的.ipr / .iml / .iws / .idea文件并运行此命令让grails重新生成您的配置:
grails integrate-with --intellij
然后运行生成的.ipr文件。