이전 글(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서버를 켜지 않고 그냥 실행했었다..