SpringBootTest에러 - java.lang.IllegalStateException: Failed to load ApplicationContext

이형석·2024년 3월 20일

WelCheck 프로젝트 

목록 보기
3/22

이전 글(https://velog.io/@seluo65/SpringBootTest%EC%97%90%EB%9F%AC-No-matching-tests-found-in-any-candidate-test-task)에서의 No matching tests found in any candidate test task.오류를 해결한 후에도 또 다른 에러가 나타났다.

문제상황
이전과 마찬가지로, Member엔터티와 MemberRepository구현체를 작성 후 Member를 Repository에 저장하는 테스트를 실행한 상황이다.

@Test
    public void 회원가입() throws Exception{
        Member member = new Member();
        // userId, password, name, username, address, sex, email
        member.setUserId("yasuo123");
        member.setPassword("password99");
        member.setName("kimyounghan");
        member.setUsername("best yasuo");
        Address address1 = new Address("South Korea", "Busan");
        member.setAddress(address1);
        member.setSex(Sex.Male);
        member.setEmail("yasuo123@gmail.com");
        em.persist(member);
        assertThat(member.getName()).isEqualTo(em.find(Member.class, member.getId()).getName());
    }

에러메시지가 엄청 긴데 그 중 핵심이라고 생각되는 부분만 조금 적어보면 다음과 같다.

java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@767599a7 testClass = K2LJ.WelCheck_Backend.member.repository.H2MemberRepositoryTest,

뇌피셜:
위 메시지를 보면 ApllicationContext의 load를 실패했다고 한다. 즉, 빈을 등록하지 못한건지, 빈을 찾을 수 없다고 한다는 것을 알게 됐다. 그렇다면 어떤 빈이 문제인지 메시지를 조금 더 읽어보면, K2LJ.WelCheck_Backend.member.repository.H2MemberRepositoryTest가 가장 앞에 나오므로 이 테스트클래스를 load하는 과정에 오류가 있다는 것이다.
그래서 이 테스트클래스가 빈으로 제대로 등록되지 않았나라고 생각했지만 아무리봐도 문제가 없어 구글링을 통해 원인을 알아냈다.

해결
https://www.inflearn.com/questions/974433/java-lang-illegalstateexception-failed-to-load-applicationcontext-%EC%98%A4%EB%A5%98
위 사이트 질문글의 답변을 인용하면, 이 에러는 보통 대체로 프로젝트 설정이나 의존성 문제로 발생하는 경우가 많다고 한다. 따라서 application.yml파일을 먼저 확인해보라고 한다.
그래서 확인해봤더니 아래와 같이 데이터베이스의존관계를 MySql에서 H2로 바꿔놓고 yml파일은 수정하지 않은 채로 놔뒀었다..

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/welcheckdb?characterEncoding=UTF-8&serverTimezone=UTC
    username: 비밀
    password: 비밀
    driver-class-name: com.mysql.cj.jdbc.Driver
  jpa:
    database-platform: org.hibernate.dialect.MySQL8Dialect
    hibernate:
      ddl-auto: create
    show-sql: true

따라서 yml파일을 수정했더니 그 다음 또 다른 새로운 에러(링크)가 발생했다
하지만 이 에러는 드디어 코딩과 관련된 에러인 것 같다.


+ 또 같은 에러가 발생했다.
위는 Entity Manager로 테스트 했는데, 이번에는 Repository객체로 테스트 해보았다. 그래서 Repository의 문제라고 생각했다.
하지만 위 내용을 다시 살펴보며 가만 생각해보니 H2서버를 켜지 않고 그냥 실행했었다..

profile
금융IT 개발자

0개의 댓글