해결된 질문
작성
·
428
·
수정됨
0
안녕하세요. 감사히 영상을 보며 공부하고 있습니다.
다름이 아니라 스프링 JdbcTemplate 적용 후 통합테스트를 진행해보는데,
회원가입과 중복_회원_예외 테스트 메소드 개별 실행시 정상적으로 작동,
클래스 테스트 실행시 중복_회원_예외 케이스 통과, 회원가입 케이스에서 에러가 발생하여 로그를 확인해보니,
회원가입 테스트 실행 전, memberService.findMembers()를 통해 확인해본 결과, 중복_회원_예외 테스트케이스에서 put 하는 member 객체가 확인이 됩니다.
Spring Boot와 JUnit 5를 사용하여 작성한 테스트 클래스의 경우, 테스트 메소드는 일반적으로 순차적으로 실행되지 않습니다. 대신, 각 테스트 메소드는 독립적으로 실행됩니다. 라고 확인이 되더라구요. 병렬적으로 실행되나, 컨텍스트가 분리되는것으로 보이는데, db는 같은걸 쓰다보니 에러가 발생하는게 아닐까 싶었습니다.
그런데 영상에서는 통합테스트에서 이러한 에러가 발생하지 않는데, 어떤 차이때문일까요?
*해당 코드 포함한 commit log link
답변 1
1
변경된 코드 내용으로 확인하니 재현되어 원인을 발견하였습니다.
아래와 같이 코드를 변경해주세요.
의존관계 주입이 jdbctemplate으로 되어야하는데, MemoryMemberRepository여서 @Transactional로 인한 롤백이 정상 실행되지 않아서 이전 테스트가 다음 테스트에 영향을 주게 된 상황입니다.
안녕하세요. 답변 감사드립니다.
해당 코드에서는 에러가 발생하지 않도록, 테스트 케이스 2개의 변수명을 강의와 달리 다르게 선언해뒀습니다.
원래 강의에 따르면 두 테스트 케이스에 사용하는 모든 setName()메소드의 파라미터로 "spring" 이 동일하게 들어가야 합니다.
강의와 같은 상황에서도 에러가 발생하지 않으실까요?
https://github.com/zenibakoLee/hello-spring/blob/main/src/test/java/hello/hellospring/service/MemberServiceIntegrationTest.java
강의와 같은, 에러가 발생하는 케이스로 업데이트 해뒀습니다!