1

当我尝试从我的 Spring Boot 应用程序调用 JUnit 测试用例时,我收到以下错误:

我在我的测试类中使用这个注释。

@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 依赖项: 在此处输入图像描述

另外,我在类路径中有受影响的类: 在此处输入图像描述

我的 Spring Boot 版本是 2.0.4。编辑器是 SpringToolSuite。有人可以帮我解决这个问题吗?

谢谢

4

4 回答 4

1

您不需要通过 Eclipse 的“JUnit 库”引入 JUnit 4 依赖项。

相反,您应该使用spring-boot-starter-test依赖项以传递方式(并自动)引入的 JUnit 4 版本。这应该为您引入 JUnit 4.12,这是所有现代版本的 Spring Boot Test 所必需的。

如果这不能帮助您解决问题,请发布您的整个 Gradle 构建脚本(或尽可能多地分享)。

于 2018-09-13T13:39:19.600 回答
0

我认为你错过了 JUnit 的依赖,因为它就像 spring 试图在 org/junit/ 中找到一些东西,但你没有。

我从不使用 gradle,但对于 maven,它应该如下所示。

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.10</version>
</dependency>

希望这可以帮助。

于 2018-09-13T03:10:58.203 回答
0

我尝试通过使用 Gradle 创建另一个示例项目来运行 Junit,它运行良好,并且惊讶地发现下面是我的帖子中提到的两个创建问题的依赖项。如果我删除这些依赖项,它就可以正常工作。不确定这里发生了什么:

编译('org.springframework.boot:spring-boot-starter-data-jpa') 编译('com.fasterxml.jackson.core:2.9.6')

于 2018-09-13T14:40:40.437 回答
0

@trjade,这是我的依赖项的屏幕截图:

在此处输入图像描述

于 2018-09-17T13:35:56.317 回答