본문 바로가기
Java 웹 프로그래밍

org.gradle.api.internal.tasks.testing.TestSuiteExecutionException: Could not execute test class 오류 해결 여정

by irerin07 2023. 10. 24.
728x90

과제를 진행하며 테스트를 진행하던 중 다음과 같은 오류가 발생했다.

org.gradle.api.internal.tasks.testing.TestSuiteExecutionException: Could not execute test class 'baseball.ApplicationTest'.
	at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:54)
	at java.base@17.0.8.1/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base@17.0.8.1/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
	at java.base@17.0.8.1/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base@17.0.8.1/java.lang.reflect.Method.invoke(Method.java:568)
	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 jdk.proxy1/jdk.proxy1.$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:113)
	at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:65)
	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: baseball.ApplicationTest
	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:137)
	at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.access$100(JUnitPlatformTestClassProcessor.java:58)
	at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.execute(JUnitPlatformTestClassProcessor.java:100)
	at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.execute(JUnitPlatformTestClassProcessor.java:90)
	at org.gradle.api.internal.tasks.testing.junit.AbstractJUnitTestClassProcessor.processTestClass(AbstractJUnitTestClassProcessor.java:60)
	at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:52)
	... 18 more
Caused by: java.lang.ClassNotFoundException: baseball.ApplicationTest
	at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
	at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525)
	at java.base/java.lang.Class.forName0(Native Method)
	at java.base/java.lang.Class.forName(Class.java:467)
	at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.loadClass(JUnitPlatformTestClassProcessor.java:135)
	... 23 more

 

그런데 이상하게 해당 오류는 특정 상황에서만 발생하고 있었다는 것이다.

 

테스트 클래스에서 테스트를 실행하면 별다른 이슈 없이 테스트를 통과하는 것을 확일 할 수 있었고, 안심하며 개발을 진행했는데

테스트 통과 했었는데요

 

gradlew.bat clean test

터미널에서 위의 명령어를 사용해 실행을 하면

못했습니다

 

계속 테스트를 실패하는 것이었다.

 

그렇게 오류 고치기 여정이 시작되었다.

 

1. 인텔리제이 Build Tool 설정 확인

우선 제일 먼저 확인한 부분은 인텔리제이의 Build Tool이 맞게 설정되어있나 였다.

Build and run using과 Run tests using 둘 다 IntelliJ IDEA로 잘 설정되어 있었다.

그렇다면 해당 부분의 이슈는 아니다.

 

2. 프로젝트 설정 확인

그럼 혹시 프로젝트의 자바 설정이 잘못 되있나 싶어서 Project Structure에 들어가 Project의 SDK를 확인하고, Modules의 Language level을 확인했다.

 

둘 다 17로 설정되어 있었고,

터미널에서 

java -version

위 명령어를 사용해 버전을 확인하니

이 역시도 문제가 없었다.

 

3. 파일 인코딩 확인

혹시 인코딩의 이슈인가 싶어서 이쪽도 확인했다.

하지만 이 역시도 잘 설정되어 있었고 이슈가 될 부분이 없어 보였다.

 

4. 원인 발견

그렇게 한참을 방황하다가 구글 검색끝에 해결법을 찾았다.

원인은 예전에 콘솔창에서 한글이 깨지는 현상이 있어서 이를 해결해보겠다고 vm option에 설정한 값과 프로젝트 경로에 한글이 섞여있어서 발생한 일이었다.

 

이를 해결하기 위해 다음과 같이 vm option을 변경하고

Before
After

프로젝트 경로상의 모든 한글을 영문으로 바꾸고 다시 터미널에서 명령어를 실행했더니...

 

!짠짜짠!

정상적으로 테스트를 통과하게 되었다.

 

원인을 찾아보니

 

Edit Custom VM options 에서 

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

옵션을 지정한 경우 프로젝트가 위치한 경로에 한글파일 폴더가 존재한다면 Windows에서 사용하는 한글 인코딩과 JVM에서 사용하는 file encoding이 달라서 프로젝트의 파일들을 제대로 읽지 못하는 문제로 보인다고 한다.

 

구글링은 역시 신이야!

 

 

 

 

참고 : 

https://www.inflearn.com/questions/459145/gradle-build-%EA%B4%80%EB%A0%A8-%EC%98%A4%EB%A5%98-%EC%A7%88%EB%AC%B8-%EB%93%9C%EB%A6%BD%EB%8B%88%EB%8B%A4-testsuiteexecutionexception

728x90