인프런 커뮤니티 질문&답변

성해인님의 프로필 이미지

작성한 질문수

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

gradle build 관련 오류 질문 드립니다(TestSuiteExecutionException)

작성

·

8.7K

2

질문용 파일 링크: https://drive.google.com/file/d/1H7Jk68AinSPuCjEWiavLgFMpQtEuHdhT/view?usp=sharing

 

gradle build를 실행할 때 계속 오류가 납니다. 우측의 Gradle Tab > (프로젝트명) > Tasks > build > build 실행
jar 파일만 생성시킬 땐 무사히 만들어지는데 build 명령을 내릴 때는 test code 단계에서 계속 오류가 납니다.

test code가 분명 있는데도 찾지를 못하네요. ClassNotFoundException

 

자주 하는 질문에 적어주신 방법은 다 시도해봤습니다.
1. IntelliJ IDEA로 test code 실행주체 바꾸기,
2. 설정이 java 11로 제대로 되어있는지 확인하고 바꾸기(자주 하는 질문 매뉴얼(https://docs.google.com/document/d/1j0jcJ9EoXMGzwAA2H0b9TOvRtpwlxI5Dtn3sRtuXQas/edit#heading=h.f9xqb7l8nuph)에 적으신 대로 선택했습니다).

3. project close 한 다음에 build.gradle 파일을 open as project로 열어서 재실행하기

4. 혹시나 버전 호환성 문제일까 싶어서 원래는 2.6.4 버전이었는데 강의에서 나온 2.3.1 버전으로 다운그레이드해서 재실험해봤거든요. 그런데도 똑같은 오류가 계속 뜨네요.

 
위의 파일 링크 안에도 포함되어있긴 하지만, 더 빨리 찾으시라고 아래에 error log 따로 적어봅니다.
 
org.gradle.api.internal.tasks.testing.TestSuiteExecutionException: Could not execute test class 'KYH.Elementary.ElementaryApplicationTests'.
	at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:53)
	at java.base@11.0.14/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base@11.0.14/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at java.base@11.0.14/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base@11.0.14/java.lang.reflect.Method.invoke(Method.java:566)
	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)
	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
	at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33)
	at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:94)
	at com.sun.proxy.$Proxy2.processTestClass(Unknown Source)
	at org.gradle.api.internal.tasks.testing.worker.TestWorker$2.run(TestWorker.java:176)
	at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:129)
	at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:100)
	at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:60)
	at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56)
	at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:133)
	at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71)
	at app//worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69)
	at app//worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74)
Caused by: org.gradle.internal.UncheckedException: java.lang.ClassNotFoundException: KYH.Elementary.ElementaryApplicationTests
	at org.gradle.internal.UncheckedException.throwAsUncheckedException(UncheckedException.java:68)
	at org.gradle.internal.UncheckedException.throwAsUncheckedException(UncheckedException.java:41)
	at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.loadClass(JUnitPlatformTestClassProcessor.java:112)
	at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.access$100(JUnitPlatformTestClassProcessor.java:54)
	at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.execute(JUnitPlatformTestClassProcessor.java:89)
	at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.execute(JUnitPlatformTestClassProcessor.java:79)
	at org.gradle.api.internal.tasks.testing.junit.AbstractJUnitTestClassProcessor.processTestClass(AbstractJUnitTestClassProcessor.java:62)
	at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51)
	... 18 more
Caused by: java.lang.ClassNotFoundException: KYH.Elementary.ElementaryApplicationTests
	at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
	at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
	at java.base/java.lang.Class.forName0(Native Method)
	at java.base/java.lang.Class.forName(Class.java:398)
	at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.loadClass(JUnitPlatformTestClassProcessor.java:110)

답변 5

10

안녕하세요. 똑같은 오류로 고생하다가 재설치하고 됐다가 

어쩌다보니 다시 똑같은 에러가 발생하게 되어 제 경우에 그 에러가 발생한 원인에 대해서 말씀드리고자 합니다.

혹시 Edit Custom VM options 에서 

  • Dfile.encoding=UTF-8
  • Dconsole.encoding=UTF-8

옵션을 지정하지 않으셨나요?? 이런 상태에서 지금 현재 프로젝트가 위치한 상위 경로에 한글파일 폴더가 존재하는 상황이신가요? 이러한 상황이라면 그 한글파일 폴더 이름을 영어로 바꾸시면 정상적으로 작동됩니다.

이러한 에러가 생기는 원인은 Windows에서 사용하는 한글 인코딩과 JVM에서 사용하는 file encoding이 달라서 프로젝트의 파일들을 제대로 읽지 못하는 문제로 보입니다.

성해인님의 프로필 이미지
성해인
질문자

답변 달아주신 걸 아주 늦게 확인했네요. 알려주신 방법이 크게 도움 됐습니다. 감사합니다.
(VM Options란에 UTF-8 설정은 해놨는데 폴더명이 한글일 땐 여전히 실행이 안 되더라고요
경로에 존재하는 모든 파일명을 죄다 영문으로 바꾼 후에야 test를 포기하지 않고도 빌드가 성공했습니다)

8

안녕하세요 똑같은 문제로 고생하다가 해결방법을 찾아서 공유드립니다.

아래 사진과 같이 설정에서 gradle을 검색하신 뒤 빨간색 칸 부분이 아마 gradle이실거라 예상됩니다.

이 부분을 intellij 로 바꿔주시면 정상적으로 작동할 것 같습니다.

감사합니다. 이방법으로 해결하였습니다.

성해인님의 프로필 이미지
성해인
질문자

TestSuiteExecutionException 오류 원인은 말씀하신 대로 IntelliJ IDEA 로 설정을 안 해놨던지 폴더명이 영문이 아니라서(한글이라서) 발생하던지 둘 중에 하나인 것 같습니다.


앞으로도 스프링부트 프로젝트 생성할 때 해당 설정 잊어버릴 일은 없을 듯합니다. 조언 감사합니다!

감사합니다! 2시간 가까이 끙끙대다가 호세님 덕분에 해결했습니다 :)

1

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. 성해인님

저도 진행해보니 잘 되는데요.

프로젝트 초기화를 진행해야 합니다.

먼저 프로젝트를 닫은 다음에

File -> Open -> 해당 프로젝트의 build.gradle을 선택해주세요. 그 다음에 선택창이 뜨는데, Open as Project를 선택해주세요.

그래도 안되면, IntelliJ부터 다시 설치해보시겠어요?

감사합니다.

0

성해인님의 프로필 이미지
성해인
질문자

서포터즈 David님 알려주신 방법 실행해봤습니다.
1번을 해도 여전히 같은 오류가 나기에 2번을 시도해보려고 했는데 Repair IDE 항목이 File 메뉴에 없더군요.


이상해서 IDEA 홈페이지에 들어가서 확인해봤는데 거기 스크린샷은 Mac 전용이더라고요. 제 환경은 Windows입니다. 위치만 다르지 어딘가엔 Repair IDE 메뉴가 있을 거라 생각하고 "repair"로 검색해봤는데 해당 항목이  actions에 없다고 나오더군요.

파일 메뉴를 그래서 직접 뒤져봤는데도 안 보이더군요.

 

여전히 같은 오류로 고통받고 있는 중입니다. 정녕 IntelliJ IDEA 를 repair하거나 삭제했다 재설치하는 것밖에 방법이 없는 걸까요?

 


사실 제가 java 8 버전에서 java 11 버전으로 업그레이드를 했는데 업그레이드 과정에서 무언가의 오류가 일어나지 않았나 의심이 됩니다. (JAVA_HOME 환경변수는 11 버전에 맞춰서 재설정했습니다)

정 안 되면 물론 IntelliJ를 삭제 -> 재설치해야겠지만 java 8 버전이었을 땐 해당 오류는 발생하지 않았습니다.

test class만 인식할 수 있으면 해당 에러는 해결이 될 것 같은데 혹시 이를 수동으로 재설정할 수 있는 방법이 있을까요?

 

 

+ 추가합니다

build.gradle의 해당 부분을 이렇게 고치니 build 자체는 되긴 됩니다

tasks.named('test') {
useJUnitPlatform()
scanForTestClasses = false
include "**/*Test.class" // whatever Ant pattern matches your test class files
}

하지만 이렇게 하면 test를 진행하지 못하기에 처음에 말씀드렸던 문제점을 꼭 해결하고 싶습니다.

 

 

 

혹시 프로젝트를 새롭게 만들어보셨을까요??

성해인님의 프로필 이미지
성해인
질문자

네, 프로젝트도 새롭게 만들어보았습니다. 사실 처음에 만든 건 kyh으로 시작하는 이름의 프로젝트 파일이었고, 제가 이 글에 적은 프로젝트는 새로 만든 두 번째 프로젝트 파일입니다.

혹시 jdk 밴더는 어디신가요?

open jdk인가요?

성해인님의 프로필 이미지
성해인
질문자

jdk "밴더"가 정확히 무슨 의미인지는 잘 모르겠지만 jdk를 어디에서 다운받았냐, 는 말씀이시라면 oracle의 java 11 jdk를 다운받았습니다.
(링크: https://www.oracle.com/java/technologies/downloads/#java11-windows)
11.0.14 version이고 openjdk는 아닌 것 같습니다. standard version이라 적혀있네요.

더이상 제가 도와드릴 수 있는 부분이 없는 것 같습니다^^;;

아시는 분 계시면 말씀 부탁드립니다.

0

안녕하세요. 성해인님, 공식 서포터즈 David입니다.

올려주신 프로젝트 실행해보니 잘 돌아가는 것을 확인했습니다.

1. File - invalidate caches - invalidate and restart 하신 후 다시 시도해주세요.

그래도 안 된다면

2. File - Repair IDE 를 선택하셔서 이후 step을 따라가며 복구하신 뒤 다시 시도해주세요.

감사합니다.