게시판 구축 테스트 코드 작성 중 생긴 문제

Kyojun Jin·2022년 3월 10일
0

안 됐던 것

1

테스트 코드 작성 시...
auto_increment를 초기화해준다.
그러려면 @Transactional 을 걸어야 한다.
이렇게 되면 데이터 삽입이 안 된다.
마치 삽입이 안 되는 것처럼.

도저히 해결책을 못 찾고 있었는데 (transactional 이랑 auto increment 초기화 없이는 잘 삽입된다.)

findAll 로 리스트를 출력해봐야지 했더니
되더라.

귀신같이도, 데이터 삽입 후 findAll로 한 번만 해줬을 뿐인데...
이유가 뭘까??
도저히 모르겠다.................


이유는 다음과 같다.
테스트 메소드에 Transactional 을 걸어주면
해당 메소드는 트랜잭션으로 작동한다.

알다시피 트랜잭션은 커밋을 하기 전에는 되돌릴 수가 있다.
삭제 또한 truncate 로 작동해서 되돌릴 수 있다.

그 말은 커밋을 하기 전에는 데이터가 아직 쓰기 지연 상태라,
save 를 하더라도 데이터베이스에 쓰여있는 상태가 아니다.
findAll 을 하면 데이터베이스에 자동으로 이전 쿼리 (save) 를 commit 하게 돼서
테스트가 성공을 했던 것이다.

사실, findAll 을 쓰기 보다는
flush 를 쓰거나 saveAndFlush 메소드를 쓰도록 한다.

2

test를 할 때... aop가 적용이 안 된다.


아무리 찾아봐도 aspect를 테스트하는 건 있어도
테스트 때 aspect를 적용하는 것은 없더라.

이유는...
테스트 클래스에 @BeforeEach, @AfterEach 를 쓰면 되기 때문이다...

0개의 댓글