Spock 2.0 的具体模拟 class 失败
Mocking of concrete class failing with Spock 2.0
模拟外部混凝土 class 失败并出现以下错误。
java.lang.AbstractMethodError: Receiver class me.spike.LibraryTest does not define or inherit an implementation of the resolved method 'abstract java.lang.Object getProperty(java.lang.String)' of interface groovy.lang.GroovyObject.
我已经尝试添加 cglibs-nodep 和 objenesis,但未能成功模拟具体的 class。
这里提到的存储库有一个失败的测试。测试本身是荒谬的。目的是让模拟工作。
虽然这只是一种解决方法,但您可以切换到 gmavenplus
来处理 Groovy 编译而不是 groovy-eclipse-compiler
,然后测试通过:
<plugin>
<groupId>org.codehaus.gmavenplus</groupId>
<artifactId>gmavenplus-plugin</artifactId>
<version>1.8.1</version>
<executions>
<execution>
<goals>
<goal>compile</goal>
<goal>compileTests</goal>
</goals>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-all</artifactId>
<version>2.5.11</version>
<scope>runtime</scope>
<type>pom</type>
</dependency>
</dependencies>
</plugin>
这似乎肯定与 Groovy Eclipse 编译器相关。我们不使用 GEC 测试 Spock,它也不受官方支持。该测试在 Spock 1.3-groovy-2.5(和 GEC)中也失败了,因此它不是 2.0 中的回归。但是,可能与JavaMockInterceptor
and some issues with Groovy 3 - #1076中的"hacks"有关。
你可以在Spock issue tracker里举报,但是不知道能不能妥善处理
就像我在另一个问题中所说的那样,您应该摆脱 Build Helper 插件,因为 Maven 会自动识别您的 src/test/groovy
- 至少,只要您的 src/test/java
不是完全空的.此外,Surefire 插件是过度指定的,就像我之前也告诉过你的那样。您应该保持构建文件较小,并且只包含需要的内容。
但真正的问题是您的 Groovy Eclipse 批处理编译器是 3.0.3 版,而您使用 Groovy 2.5.11 版。只需降级该依赖项以适合您的 Groovy 版本,您的测试就会正常运行。或者走另一条路,将 Groovy 和 Spock 升级到 3.0。无论如何,更改此行可以修复您的构建:
<groovy-eclipse-batch.version>2.5.11-01</groovy-eclipse-batch.version>
模拟外部混凝土 class 失败并出现以下错误。
java.lang.AbstractMethodError: Receiver class me.spike.LibraryTest does not define or inherit an implementation of the resolved method 'abstract java.lang.Object getProperty(java.lang.String)' of interface groovy.lang.GroovyObject.
我已经尝试添加 cglibs-nodep 和 objenesis,但未能成功模拟具体的 class。
这里提到的存储库有一个失败的测试。测试本身是荒谬的。目的是让模拟工作。
虽然这只是一种解决方法,但您可以切换到 gmavenplus
来处理 Groovy 编译而不是 groovy-eclipse-compiler
,然后测试通过:
<plugin>
<groupId>org.codehaus.gmavenplus</groupId>
<artifactId>gmavenplus-plugin</artifactId>
<version>1.8.1</version>
<executions>
<execution>
<goals>
<goal>compile</goal>
<goal>compileTests</goal>
</goals>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-all</artifactId>
<version>2.5.11</version>
<scope>runtime</scope>
<type>pom</type>
</dependency>
</dependencies>
</plugin>
这似乎肯定与 Groovy Eclipse 编译器相关。我们不使用 GEC 测试 Spock,它也不受官方支持。该测试在 Spock 1.3-groovy-2.5(和 GEC)中也失败了,因此它不是 2.0 中的回归。但是,可能与JavaMockInterceptor
and some issues with Groovy 3 - #1076中的"hacks"有关。
你可以在Spock issue tracker里举报,但是不知道能不能妥善处理
就像我在另一个问题中所说的那样,您应该摆脱 Build Helper 插件,因为 Maven 会自动识别您的 src/test/groovy
- 至少,只要您的 src/test/java
不是完全空的.此外,Surefire 插件是过度指定的,就像我之前也告诉过你的那样。您应该保持构建文件较小,并且只包含需要的内容。
但真正的问题是您的 Groovy Eclipse 批处理编译器是 3.0.3 版,而您使用 Groovy 2.5.11 版。只需降级该依赖项以适合您的 Groovy 版本,您的测试就会正常运行。或者走另一条路,将 Groovy 和 Spock 升级到 3.0。无论如何,更改此行可以修复您的构建:
<groovy-eclipse-batch.version>2.5.11-01</groovy-eclipse-batch.version>