[Spring] - @SpringBootTest 에러

문제 발단

기본적인 코드를 작성한 뒤 Test를 해야할 일이 생겨 간단한 코드를 작성 후 돌려봤는데 아래와 같은 에러를 마주치게 되었다.

java.lang.IllegalStateException: Failed to load ApplicationContext

test-error

문제 분석

테스트로 작성한 코드는 아래와 같다.
컴파일 시점으로 봐도 문제될게 없는 코드였고, Application도 정상적으로 작동했다. test-code-example

에러 구문을 분석해보니 아래와 같은 내용도 포함되어 있었다.

Caused by: java.lang.ClassNotFoundException: org.springframework.jdbc.support.JdbcTransactionManager

문제 해결 과정

처음에는 에러의 가장 윗 단을 보는게 익숙해서 아래 구문을 구글링해서 찾아보았다.

java.lang.IllegalStateException: Failed to load ApplicationContext

여러 커뮤니티에서는 아래 어노테이션을 붙이면 말끔히 해결된다고 나와있어 큰 기대감을 가지고 추가해봤지만, 아무 소용이 없었다.

@RunWith(SpringRunner.class)
@WebAppConfiguration

때문에 에러 구문의 중간에 있는 Caused by:로 시작하는 부분을 찾아 다시 검색해보았다.

Caused by: java.lang.ClassNotFoundException: org.springframework.jdbc.support.JdbcTransactionManager

아쉽게도 이 문제를 국내에서 다루는 곳은 없었고, 이 구문과 정확한 문장을 다루고 있는 곳은 중국의 어느 커뮤니티 사이트 밖에 없었다. 확인해보니 해당 커뮤니티에서는 build.gradle에 있는 dependenciesspring-jdbc 버전에 대한 문제라고 했다.

해결 코드

// 변경 전 build.gradle
dependencies {
    ...
    implementation group: 'org.springframework', name: 'spring-jdbc', version: '5.2.3.RELEASE'
    ...
}
// 변경 후 build.gradle
dependencies {
    ...
    implementation group: 'org.springframework', name: 'spring-jdbc', version: '5.3.4'
    ...
}

실제로 커뮤니티에서 다루는 spring-jdbc 버전과 나의 버전은 비슷했고, 상위 버전으로 올려주니 말끔히 해결되었다 !

앞으로 에러가 발생하면 가장 위에 있는 구문을 검색해보는 것도 좋지만 중간에 발생한 문제부터 해결해보는 습관을 가져야할 것 같다.

참고 블로그

https://blog.csdn.net/weixin_43549350/article/details/115050847

댓글남기기