비동기 메서드 테스트 코드 작성 시, DB 관련 유의점.Software Development/Trial-and-error2024. 2. 5. 17:37
Table of Contents
https://20180913.tistory.com/70
@Async 어노테이션이 붙은 비동기 메서드로 DB에 데이터를 생성 혹은 삭제하는 메서드가 있었다.
이걸 테스트를 하는데, 하나의 클래스 안에서 하나의 DB에 CRUD가 일어나는 여러 메서드들을 함께 테스트 하고 있었다.
각각 테스트 메서드는 잘 작동하는데, 클래스 전체를 테스트를 돌리니 일부 메서드에서 Fail이 일어나는 문제가 있었는데..
암튼 디버깅을 해보니, 다른 메서드에서 변경된 DB가 롤백되지 않아서, 그 데이터가 남아서 발생하는 오류였다.
어라라, @Test를 붙이면 그 부분은 알아서 롤백되는 것이 아니었던가?
메인 테스트의 트랜잭션과는 별도로 관리되기 때문에, 별도의 처리를 해줘야 했다.
비동기 메서드에 대한 테스트 로직은 앞서 정했기 때문에, 강제로 동기 처리를 해준다던지 할 생각은 없었고,
그냥 메서드를 실행할 때 생성된 데이터를 지우는 식으로 해결하고자 했다.
그렇다면 메서드 끝부분에 방금 생성한 데이터의 Key값을 기록해서 지워줘야 하나?
-> 좋은 방법이겠지만, 어차피 별도의 테스트 H2 DB를 사용하고 있기 때문에 이렇게까지 해줄필요는 없겠다는 판단..
@AfterEach 를 활용해서, 그냥 매번 레파지토리를 초기화해주기로 한다.
@AfterEach
public void cleanUp() {
actionApiRepository.deleteAll();
episodeApiRepository.deleteAll();
}
문제 해결
'Software Development > Trial-and-error' 카테고리의 다른 글
@찐빵1 :: 위기주도학습
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!