>

Spring Boot Application에서 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 의존성이 있습니다 :

또한 클래스 경로에 영향을받는 클래스가 있습니다.

내 봄 부팅 버전은 2.0.4입니다. 에디터는 SpringToolSuite입니다. 누군가이 문제를 해결하도록 도와 줄 수 있습니까?

감사합니다

  • 답변 # 1

    봄이 org/junit /에서 무언가를 찾으려고하는 것처럼 JUnit의 의존성을 그리워한다고 생각하지만 그렇게하지 않았습니다.

    나는 gradle을 사용하지 않지만 maven의 경우 다음과 같아야합니다.

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

    이것이 도움이되기를 바랍니다.

  • 답변 # 2

    Eclipse의 "JUnit 라이브러리"를 통해 JUnit 4 종속성을 가져올 필요는 없습니다.

    대신 spring-boot-starter-test 버전의 JUnit 4를 사용해야합니다.  의존성은전 이적으로가져옵니다 (그리고 자동으로). 모든 최신 버전의 Spring Boot Test에 필요한 JUnit 4.12가 필요합니다.

    문제를 해결하는 데 도움이되지 않으면 전체 Gradle 빌드 스크립트 (또는 공유 할 수있는만큼)를 게시하십시오.

  • 답변 # 3

    다른 샘플 프로젝트를 만들어 Junit을 실행하려고했습니다. Gradle과 그것은 잘 작동하고 내 게시물에 언급 된 문제를 일으키는 두 가지 종속성이 있음을 알고 놀랐습니다. 해당 종속성을 제거하면 제대로 작동합니다. 무슨 일이 일어나고 있는지 잘 모르겠습니다 :

    컴파일 ( 'org.springframework.boot : spring-boot-starter-data-jpa') compile ( 'com.fasterxml.jackson.core : 2.9.6')

  • 답변 # 4

    @trjade, 여기 내 의존성 스크린 샷이 있습니다 :

관련 자료

  • 이전 visual studio - dev/local 클러스터에 Service Fabric 응용 프로그램을 배포 할 수 없습니다
  • 다음 java - 할당이 마지막으로 시도 된 경우에도 최종 변수를 catch에 다시 할당 할 수 있습니까?