IntelliJ IDEA 的零覆盖:带有 Spock 单元测试的 Grails

Posted

技术标签:

【中文标题】IntelliJ IDEA 的零覆盖:带有 Spock 单元测试的 Grails【英文标题】:Zero coverage with IntelliJ IDEA: Grails with Spock unit tests 【发布时间】:2015-10-12 18:30:51 【问题描述】:

在运行基于 Spock 的单元测试时,我正在尝试为 Grails 应用程序配置代码覆盖率报告。我能够生成报告,但覆盖率为 0。

我尝试过使用各种选项(例如 SamplingTracing),但结果始终相同:显示的类/方法/行的总数是正确的,但覆盖率始终为0,例如:

类,%:0%(0/2)

方法,%:0%(0/4)

线,%:0%(0/16)

这显然是假的,因为可以修改相关代码,导致测试失败。

设置:

OS X Yosemite 10.10.2 IntelliJ IDEA Ultimate 14.1.3 Grails 2.4.4 Spock 0.7 Groovy 2.4.3 Java 1.8.0-31

【问题讨论】:

【参考方案1】:

我写信给 JetBrains 支持,他们指出了以下问题:

https://youtrack.jetbrains.com/issue/IDEA-137285

总之,分辨率就是指定

grails.project.fork = [
  test: false
]

BuildConfig.groovy 中。

另外,请参阅 IntelliJ IDEA Debugger isn't working on a Grails Project - 那里有一些关于何时/如何/为什么使用分叉模式的有用信息。

【讨论】:

这会在某些情况下大大减慢测试用例的执行速度。在此之后,我目前面临着缓慢的问题。【参考方案2】:

几个月前我也遇到过类似的问题。我使用 STS 并编写了基于 Spock 的测试用例。

您正在使用的代码覆盖插件并未将基于 Spock 的测试用例视为实际测试用例。它只考虑 JUinit 测试用例。

所以这里的解决方案是寻找与 IntelliJ 兼容的其他代码覆盖插件。我无法向您推荐我用于 STS 的插件,因为它可能适用于 IntelliJ,也可能不适用于 IntelliJ。

我希望至少我说清楚了问题所在。

【讨论】:

谢谢!我已将此问题提交给 JetBrains 支持。如果他们确实证实这是问题所在,我会接受您的回答。 从 JetBrains 得到答案 - 禁用分叉可以解决问题 完美。将使用我的旧插件在 STS 中检查类似情况。但归根结底,这是 IDE 的问题。酷。【参考方案3】:

我今天遇到了这个错误。我最终发现你不应该使用工具栏中的“运行覆盖范围的应用程序”,而应该使用项目上下文菜单中的“运行 'Test in 'application'' with Coverage”。

当您在 IntelliJ 中运行测试时,会在“运行/调试配置”中创建一个 JUnit 测试,这些可以从工具栏中使用(例如,用于重新运行)。

【讨论】:

以上是关于IntelliJ IDEA 的零覆盖:带有 Spock 单元测试的 Grails的主要内容,如果未能解决你的问题,请参考以下文章

Intellij IDEA run coverage之覆盖率测试

Intellij idea Junit单元测试不显示代码覆盖率

intellij idea中怎么覆盖tostring(),hashcode(),equals()?

Android Studio 和带有插件的 IntelliJ IDEA 之间的区别?

为啥intellij idea fastjson string放入对象后再取出的时候带有\

Intellij-IDEA:如何按字母顺序对成员进行排序?