运行 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,这是我的依赖项的屏幕截图: