본문 바로가기

나만의 작업/Spring

[Junit5] SpringBoot2+Junit5 에서 TestEngine with ID 'junit-jupiter' failed to discover tests 오류 해결방법

Spring Boot 의 기본 junit4 대신 junit5(2019.7월 말 현재 최신버전인 junit 5.5.1 )를 쓰기 위해 설정하는 도중 만난 오류가 있어서 공유합니다.

 

 

개발 환경

IngelliJ IDEA

gradle 5.0

Spring Boot 2.1.0.RELEASE

Spring Boot 의 기본 junit4 대신 junit5(2019.7월 말 현재 최신버전인 junit 5.5.1 )를 쓰기 위해 설정하는 도중 만난 오류가 있어서 공유합니다.

 

Spring Boot 의 기본 junit4 버전 제외. (build.gradle)

testImplementation('org.springframework.boot:spring-boot-starter-test') {
    exclude module: 'junit'
}

 

junit5 lib 추가 (build.gradle, junit-jupiter-engine관련 lib)

testImplementation("org.junit.jupiter:junit-jupiter-api:5.5.1")
testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.5.1")

이  dependencies에 추가후 testcase를 돌리면 아래와 같은 오류가 났습니다.

 

7월 25, 2019 6:33:39 오후 org.junit.platform.launcher.core.DefaultLauncher handleThrowable

WARNING: TestEngine with ID 'junit-jupiter' failed to discover tests

java.lang.NoClassDefFoundError: org/junit/platform/engine/support/discovery/SelectorResolver

...더보기

    at org.junit.jupiter.engine.JupiterTestEngine.discover(JupiterTestEngine.java:69)

    at org.junit.platform.launcher.core.DefaultLauncher.discoverEngineRoot(DefaultLauncher.java:168)

    at org.junit.platform.launcher.core.DefaultLauncher.discoverRoot(DefaultLauncher.java:155)

    at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:128)

    at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:69)

    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)

Caused by: java.lang.ClassNotFoundException: org.junit.platform.engine.support.discovery.SelectorResolver

    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:583)

    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)

    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)

    ... 8 more

 

 

 

junit5의 dependency를 살펴봅니다.

제가 추가한 lib 외에 junit-platform-* 이 dependency 관계가 있어서 추가된 걸 확인할 수 있는데,

문제가 되는 junit-platform에서 버전이 맞지 않아서 발생하는 오류인지 junit-platform-* lib를 강제로 현재 최신 버전인 1.5.1 으로 추가 설정해주었습니다. 

junit-platform-commons:1.3.1 버전은 junit-jupiter-api:5.5.1 에 dependency가 있기 때문에 제외를 해줍니다.

testImplementation("org.junit.jupiter:junit-jupiter-api:5.5.1") {
    exclude module:'junit-platform-commons'
}
testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.5.1")
testRuntimeOnly("org.junit.platform:junit-platform-engine:1.5.1")
testRuntimeOnly("org.junit.platform:junit-platform-commons:1.5.1")

 

 

해결된 후 dependency 확인! 실패했던 Testcase도 잘 돌아갑니다.