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。
我尝试过使用各种选项(例如 Sampling 与 Tracing),但结果始终相同:显示的类/方法/行的总数是正确的,但覆盖率始终为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 之间的区别?