运行 spring 启动测试时出错,SpringRunner.class 未找到
Error while running spring boot tests, SpringRunner.class Not found
当我尝试从我的 Spring 引导应用程序调用 JUnit 测试用例时,出现以下错误:
我在我的测试中使用这个注释 class。
@RunWith(SpringRunner.class)
从项目依赖项中添加 JUnit 库后,出现以下错误:
java.lang.TypeNotPresentException: Type org.springframework.test.context.junit4.SpringRunner not present
at sun.reflect.annotation.TypeNotPresentExceptionProxy.generateException(TypeNotPresentExceptionProxy.java:46)
at sun.reflect.annotation.AnnotationInvocationHandler.invoke(AnnotationInvocationHandler.java:84)
at com.sun.proxy.$Proxy2.value(Unknown Source)
at org.junit.internal.builders.AnnotatedBuilder.runnerForClass(AnnotatedBuilder.java:86)
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:26)
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:33)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createUnfilteredTest(JUnit4TestLoader.java:87)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createTest(JUnit4TestLoader.java:73)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.loadTests(JUnit4TestLoader.java:46)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:522)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:760)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:460)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:206)
Caused by: java.lang.ClassNotFoundException: org.springframework.test.context.junit4.SpringRunner
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:348)
at sun.reflect.generics.factory.CoreReflectionFactory.makeNamedType(CoreReflectionFactory.java:114)
at sun.reflect.generics.visitor.Reifier.visitClassTypeSignature(Reifier.java:125)
at sun.reflect.generics.tree.ClassTypeSignature.accept(ClassTypeSignature.java:49)
at sun.reflect.annotation.AnnotationParser.parseSig(AnnotationParser.java:439)
at sun.reflect.annotation.AnnotationParser.parseClassValue(AnnotationParser.java:420)
at sun.reflect.annotation.AnnotationParser.parseMemberValue(AnnotationParser.java:349)
at sun.reflect.annotation.AnnotationParser.parseAnnotation2(AnnotationParser.java:286)
at sun.reflect.annotation.AnnotationParser.parseAnnotations2(AnnotationParser.java:120)
at sun.reflect.annotation.AnnotationParser.parseAnnotations(AnnotationParser.java:72)
at java.lang.Class.createAnnotationData(Class.java:3521)
at java.lang.Class.annotationData(Class.java:3510)
at java.lang.Class.getAnnotation(Class.java:3415)
at org.junit.internal.builders.IgnoredBuilder.runnerForClass(IgnoredBuilder.java:10)
... 11 more
这是我的 gradle 依赖项:
此外,我在 class 路径中有受影响的 class:
我的 spring 引导版本是 2.0.4。编辑器是 SpringToolSuite。有人可以帮我解决这个问题吗?
谢谢
我认为您错过了 JUnit 的依赖性,因为它就像 spring 试图在 org/junit/ 中找到一些东西,但您没有。
我从不使用 gradle 但对于 Maven,它应该如下所示。
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
</dependency>
希望对您有所帮助。
您不需要通过 Eclipse 的 "JUnit library".
引入 JUnit 4 依赖项
相反,您应该使用 spring-boot-starter-test
依赖项 传递 (并自动)引入的 JUnit 4 版本。这应该为您引入 JUnit 4.12,这是 Spring 启动测试的所有现代版本所必需的。
如果这不能帮助您解决问题,请 post 您的整个 Gradle 构建脚本(或尽可能多地分享)。
我通过使用 Gradle 创建另一个示例项目来尝试 运行 Junit,它工作正常并且很惊讶地看到下面是我 post 中提到的两个依赖项创建问题.如果我删除这些依赖项,它就可以正常工作。不确定这里发生了什么:
编译('org.springframework.boot:spring-boot-starter-data-jpa')
编译('com.fasterxml.jackson.core:2.9.6')
@trjade,这是我的依赖项的屏幕截图:
当我尝试从我的 Spring 引导应用程序调用 JUnit 测试用例时,出现以下错误:
我在我的测试中使用这个注释 class。
@RunWith(SpringRunner.class)
从项目依赖项中添加 JUnit 库后,出现以下错误:
java.lang.TypeNotPresentException: Type org.springframework.test.context.junit4.SpringRunner not present
at sun.reflect.annotation.TypeNotPresentExceptionProxy.generateException(TypeNotPresentExceptionProxy.java:46)
at sun.reflect.annotation.AnnotationInvocationHandler.invoke(AnnotationInvocationHandler.java:84)
at com.sun.proxy.$Proxy2.value(Unknown Source)
at org.junit.internal.builders.AnnotatedBuilder.runnerForClass(AnnotatedBuilder.java:86)
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:26)
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:33)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createUnfilteredTest(JUnit4TestLoader.java:87)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createTest(JUnit4TestLoader.java:73)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.loadTests(JUnit4TestLoader.java:46)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:522)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:760)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:460)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:206)
Caused by: java.lang.ClassNotFoundException: org.springframework.test.context.junit4.SpringRunner
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:348)
at sun.reflect.generics.factory.CoreReflectionFactory.makeNamedType(CoreReflectionFactory.java:114)
at sun.reflect.generics.visitor.Reifier.visitClassTypeSignature(Reifier.java:125)
at sun.reflect.generics.tree.ClassTypeSignature.accept(ClassTypeSignature.java:49)
at sun.reflect.annotation.AnnotationParser.parseSig(AnnotationParser.java:439)
at sun.reflect.annotation.AnnotationParser.parseClassValue(AnnotationParser.java:420)
at sun.reflect.annotation.AnnotationParser.parseMemberValue(AnnotationParser.java:349)
at sun.reflect.annotation.AnnotationParser.parseAnnotation2(AnnotationParser.java:286)
at sun.reflect.annotation.AnnotationParser.parseAnnotations2(AnnotationParser.java:120)
at sun.reflect.annotation.AnnotationParser.parseAnnotations(AnnotationParser.java:72)
at java.lang.Class.createAnnotationData(Class.java:3521)
at java.lang.Class.annotationData(Class.java:3510)
at java.lang.Class.getAnnotation(Class.java:3415)
at org.junit.internal.builders.IgnoredBuilder.runnerForClass(IgnoredBuilder.java:10)
... 11 more
这是我的 gradle 依赖项:
此外,我在 class 路径中有受影响的 class:
我的 spring 引导版本是 2.0.4。编辑器是 SpringToolSuite。有人可以帮我解决这个问题吗?
谢谢
我认为您错过了 JUnit 的依赖性,因为它就像 spring 试图在 org/junit/ 中找到一些东西,但您没有。
我从不使用 gradle 但对于 Maven,它应该如下所示。
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
</dependency>
希望对您有所帮助。
您不需要通过 Eclipse 的 "JUnit library".
引入 JUnit 4 依赖项相反,您应该使用 spring-boot-starter-test
依赖项 传递 (并自动)引入的 JUnit 4 版本。这应该为您引入 JUnit 4.12,这是 Spring 启动测试的所有现代版本所必需的。
如果这不能帮助您解决问题,请 post 您的整个 Gradle 构建脚本(或尽可能多地分享)。
我通过使用 Gradle 创建另一个示例项目来尝试 运行 Junit,它工作正常并且很惊讶地看到下面是我 post 中提到的两个依赖项创建问题.如果我删除这些依赖项,它就可以正常工作。不确定这里发生了什么:
编译('org.springframework.boot:spring-boot-starter-data-jpa') 编译('com.fasterxml.jackson.core:2.9.6')
@trjade,这是我的依赖项的屏幕截图: