-
@Transactional은 auto_increment를 초기화 하지 못한다프로젝트/게시판 프로젝트 2022. 6. 30. 02:21
프로젝트의 테스트를 작성하던 도중 Unique 한 PK값이 존재하지 않아 auto_increment 되는 값을 통해 조회해야 하는 일이 발생하였습니다.
저는 @BeforeEach 어노테이션이 매번 호출되도록 설정하여 repository를 새로 초기화했으며 @Transcational 어노테이션이 @DataJpaTest 안에 들어있어 1개의 데이터를 넣어주면 1L을 조회하면 될 것이라고 생각하였습니다.
@BeforeEach void setUp() { boardService = new BoardServiceImpl(boardRepository); }
하지만 @Transactional 어노테이션은 테이블에 대한 롤백은 시켜주나, auto-increment에 대한 롤백은 되지 않았습니다.
즉, auto-increment에서 독립적으로 테스트하길 원한다면 이에 대한 세팅을 추가적으로 해주어야 합니다.
이런 이슈때문에 각 테스트는 독립적으로 수행되지 않으며 다른 테스트에 영향이 받는 상황이 놓인 것입니다.
해결방법 1
@SQL 어노테이션 활용
ALTER TABLE station AUTO_INCREMENT = 1;
테이블의 auto-increment 값을 1로 세팅해줍니다.
해결방법 2
Repository Layer를 Mocking 해서 테스트 진행
해결방법 3
1L 같은 매직넘버를 사용하지 않고 직접 id값을 받아와서 수행
출처
https://unluckyjung.github.io/testcode/2021/05/08/Independent-Test-Mehod/
'프로젝트 > 게시판 프로젝트' 카테고리의 다른 글
Spring Data JPA에서 페이징 구현하기 (0) 2022.07.01 인터셉터를 활용한 인증/인가 공통처리 (0) 2022.06.29 JPA 게시판 엔티티 만들기 (0) 2022.06.23 Jackson ObjectMapper의 동작과정 (0) 2022.06.20 AWS EC2 build 무한로딩 에러(EC2 메모리 부족 현상 대처) (0) 2022.06.16