안 됐던 것
테스트 코드 작성 시...
auto_increment를 초기화해준다.
그러려면 @Transactional 을 걸어야 한다.
이렇게 되면 데이터 삽입이 안 된다.
마치 삽입이 안 되는 것처럼.
도저히 해결책을 못 찾고 있었는데 (transactional 이랑 auto increment 초기화 없이는 잘 삽입된다.)
findAll 로 리스트를 출력해봐야지 했더니
되더라.
귀신같이도, 데이터 삽입 후 findAll로 한 번만 해줬을 뿐인데...
이유가 뭘까??
도저히 모르겠다.................
이유는 다음과 같다.
테스트 메소드에 Transactional 을 걸어주면
해당 메소드는 트랜잭션으로 작동한다.
알다시피 트랜잭션은 커밋을 하기 전에는 되돌릴 수가 있다.
삭제 또한 truncate 로 작동해서 되돌릴 수 있다.
그 말은 커밋을 하기 전에는 데이터가 아직 쓰기 지연 상태라,
save 를 하더라도 데이터베이스에 쓰여있는 상태가 아니다.
findAll 을 하면 데이터베이스에 자동으로 이전 쿼리 (save) 를 commit 하게 돼서
테스트가 성공을 했던 것이다.
사실, findAll 을 쓰기 보다는
flush 를 쓰거나 saveAndFlush 메소드를 쓰도록 한다.
test를 할 때... aop가 적용이 안 된다.
아무리 찾아봐도 aspect를 테스트하는 건 있어도
테스트 때 aspect를 적용하는 것은 없더라.
이유는...
테스트 클래스에 @BeforeEach, @AfterEach 를 쓰면 되기 때문이다...