2024. 7. 17. 18:27ㆍTIL
❎ 문제발생
프로젝트 진행중 테스트 과정에서 개별 테스트는 통과하지만
통합테스트에서는 해당 테스트가 실패하는 현상이 발생하였다.
🆘 해결 과정
테스트 코드에 있는 id부분이 db가 초기화 될때마자 id는 초기화 되지않고 증가한 상태로 db가 만들어지기 때문에 해당 테스트 코드에서 test가 실패를 한 상황이다.
통합테스트에서 테스트가 성공한 이유는 테스트 코드에서는 기본적으로 같은 애플리케이션 컨텍스트를 재활용하는 것이 일반적이기 때문이다.
하지만 테스트가 실행될때마다 실제 db에 저장이 되면 안되기 때문에 @Transactional을 이용해서 해결을 할려고 했지만 해결이 되지 않아 @AfterEach를 사용해 각 테스트가 실행이 될때마다 db를 삭제할려고 시도하였지만, id가 1부터 시작하는것이 아니여서 계속해서 오류가 발생하였다.
처음에 사용한 방법은 직접 id를 1부터 시작하도록 하는 방법이었다.
두번째로 사용한 방법은 @DirtiesContext 어노테이션을 사용하여 애플리케이션 컨텍스트를 재활용하지 않고 독립적으로 실행되도록 하는 방법이다.
이 방법을 사용하여도 정상적으로 테스트가 통과하는 것을 확인할 수 있다.
✔ 해결
최종적으로는 @DirtiesContext를 사용하여 해결하였는데 기존의 컨텍스트를 활용하지 않고 개별적으로 실행이 되다 보니 테스트 실행속도가 느려진다는 단점이 있다. 테스트 코드의 FIRST 원칙중 FAST에 적합하지는 않을 수 있기 때문에 프로젝트의 환경에 따라서 적절하게 사용해야겠다.
'TIL' 카테고리의 다른 글
Fetch Join (0) | 2024.07.19 |
---|---|
최종 프로젝트 (7일차) (0) | 2024.07.18 |
Cannot convert existing claim value of type 'class java.lang.Integer' to desired type 'class java.lang.String'. 오류 (0) | 2024.07.16 |
check & require로 예외처리를 간단하게 (0) | 2024.07.15 |
Proxy (0) | 2024.07.14 |