프로젝트/게시판 프로젝트

@Transactional은 auto_increment를 초기화 하지 못한다

Junuuu 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 5, H2 DB 환경

unluckyjung.github.io