java - Spock spring模块在运行测试时导致NoSuchMethodError

标签 java spring maven spock

我正在使用以下 spock 依赖项

 <dependency>
        <groupId>org.spockframework</groupId>
        <artifactId>spock-core</artifactId>
        <version>1.0-groovy-2.4</version>
        <scope>test</scope>
 </dependency>

我写了这个测试

class JsonIncludeResolverTest extends Specification {
    JsonIncludeResolver uut;
    def "test"(){
       expect:
       true
    }
}

the test succeeds

现在我想使用 Spring 在规范内注入(inject) JsonIncludeResolverJsonIncludeResolver 使用 @Component 注解,在运行应用时注入(inject)成功。测试和组件都放在同一个 Maven 模块中。

我在这里阅读了有关 spring-spock 的内容:How to inject spring beans into spock test

因此我添加了这个依赖版本

<dependency>
      <groupId>org.spockframework</groupId>
      <artifactId>spock-spring</artifactId>
      <version>1.1-groovy-2.4</version>
      <scope>test</scope>
</dependency>

添加此依赖项后运行 s

Exception in thread "main" java.lang.NoSuchMethodError: org.spockframework.util.ReflectionUtil.isAnnotationPresentRecursive(Ljava/lang/Class;Ljava/lang/Class;)Z
at org.spockframework.spring.SpringExtension.isSpringSpec(SpringExtension.java:83)
at org.spockframework.spring.SpringExtension.visitSpec(SpringExtension.java:59)
at org.spockframework.runtime.ExtensionRunner.runGlobalExtensions(ExtensionRunner.java:46)
at org.spockframework.runtime.ExtensionRunner.run(ExtensionRunner.java:40)
at org.spockframework.runtime.Sputnik.runExtensionsIfNecessary(Sputnik.java:88)
at org.spockframework.runtime.Sputnik.getDescription(Sputnik.java:55)
at com.intellij.junit4.JUnit4IdeaTestRunner.getDescription(JUnit4IdeaTestRunner.java:78)
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:50)
at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)

然后我尝试使用正确的注释

@ContextConfiguration
class JsonIncludeResolverTest extends Specification {
    @Autowired
    JsonIncludeResolver uut;
    def "test"(){
       expect:
       uut != null
    }
}

结果还是上面的异常。

groovy 测试位于 /src/test/groovy 下,正如您在第一次成功运行测试时可以看到的那样。

最佳答案

尝试按如下方式将 Spock 升级到 1.1:

 <dependency>
        <groupId>org.spockframework</groupId>
        <artifactId>spock-core</artifactId>
        <version>1.1-groovy-2.4</version>
        <scope>test</scope>
 </dependency>

org.spockframework.util.ReflectionUtil.isAnnotationPresentRecursive() 自 1.1 版起由 this commit 引入.

关于java - Spock spring模块在运行测试时导致NoSuchMethodError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50713270/

相关文章:

java - 使用 spring 框架 hibernate 的 bootstrap 验证表单

java - 为什么我在 JBoss7.1.EAP 中加载 applicationContext 时出现 java.lang.NoSuchMethodError

java - REST 客户端 restTemplate 无法获取对象集合

java - 如何使 scala-maven-plugin 查看由 maven-compiler-plugin 编译的类?

javascript - 将数组与 javascript 调用一起发送到 java -rest 中的 Driver 类

java - 无法正确比较两个字符串

java - Spring solr动态字段注解

java - 如何在java中使用NextLine()获取多个输入

java - Maven AspectJ 编织 NullPointerException

java - JPA 2.1 支持需要哪些 Hibernate Jars?