@AfterEach 그리고 @DirtiesContext (테스트 코드)

2024. 7. 17. 18:27TIL

 

 문제발생

프로젝트 진행중 테스트 과정에서 개별 테스트는 통과하지만

 

통합테스트에서는 해당 테스트가 실패하는 현상이 발생하였다.

 

 

🆘 해결 과정

 

테스트 코드에 있는 id부분이 db가 초기화 될때마자 id는 초기화 되지않고 증가한 상태로 db가 만들어지기 때문에 해당 테스트 코드에서 test가 실패를 한 상황이다.

통합테스트에서 테스트가 성공한 이유는 테스트 코드에서는 기본적으로 같은 애플리케이션 컨텍스트를 재활용하는 것이 일반적이기 때문이다.

하지만 테스트가 실행될때마다 실제 db에 저장이 되면 안되기 때문에 @Transactional을 이용해서 해결을 할려고 했지만 해결이 되지 않아 @AfterEach를 사용해 각 테스트가 실행이 될때마다 db를 삭제할려고 시도하였지만, id가 1부터 시작하는것이 아니여서 계속해서 오류가 발생하였다.

처음에 사용한 방법은 직접 id를 1부터 시작하도록 하는 방법이었다.

 

두번째로 사용한 방법은 @DirtiesContext 어노테이션을 사용하여 애플리케이션 컨텍스트를 재활용하지 않고 독립적으로 실행되도록 하는 방법이다.

 

이 방법을 사용하여도 정상적으로 테스트가 통과하는 것을 확인할 수 있다.

 

 해결

 

최종적으로는 @DirtiesContext를 사용하여 해결하였는데 기존의 컨텍스트를 활용하지 않고 개별적으로 실행이 되다 보니 테스트 실행속도가 느려진다는 단점이 있다. 테스트 코드의 FIRST 원칙중 FAST에 적합하지는 않을 수 있기 때문에 프로젝트의 환경에 따라서 적절하게 사용해야겠다.