如何使IDEA识别Spock的with()方法?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使IDEA识别Spock的with()方法?相关的知识,希望对你有一定的参考价值。

我在Groovy上写,并使用Spock框架进行测试。前一段时间,IDEA完全支持Spock。当我在where-block中编写代码内部的功能(测试方法)时:

with(someObject) {
 intField == 1
 ...
}

IDEA正确地识别someObject并且理解intField是对象的领域,它也提供了我对象的其他领域。因此,在Spock的with()块中,我感觉就像在DefaultGroovyMethods(with{}each{}find{}等)的任何闭包内,但不需要使用显式的it param。

(所以,我在写with(someObject) { intField == 1 }someObject.with { assert it.intField == 1 }是一样的。

过了一会儿,IDEA错过了Spock的with()方法支持。现在,它不认识参数的类(例如someObject)认为它是Object类的对象。闭包内的任何字段都不会被识别。明确的it用法没有帮助。

enter image description here

在一些IDEA更新后,一切都已修复,但重启后问题又回来了。

有人知道怎么解决吗?

我正在使用IDE的最新版本 - 2018.2

答案

我刚用2018.1进行了测试,并且和你有同样的问题。我没有运行代码,但我相当肯定代码将被识别并执行。这对我来说看起来像是Intellij的一个错误,在他们的票证跟踪系统中提交错误报告可能是值得的。

以上是关于如何使IDEA识别Spock的with()方法?的主要内容,如果未能解决你的问题,请参考以下文章

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

Compile Groovy/Spock with GMavenPlus

解决IDEA 中git 无法自动push 提交问题 Push failed: Failed with error: Could not read from remote repository.(示例代

在 Spock 中的项目列表上断言

如何使用 Spring Boot 应用程序和 Spock 测试在运行时更改服务器端口

Grails / Spock:如何在类中模拟从类本身调用方法的单个方法?