Test시 AUTO_INCREMENT 초기화 문제
아래와 같이 update 메서드를 테스트하려고 했다.
@Test
@DisplayName("db에 존재하는 article의 내용을 수정 할수 있다.")
void updateArticleTest(){
//given
jdbcArticleRepository.save(expectedArticle);
Article updateArticle = createArticleForUpdate();
//when
jdbcArticleRepository.updateArticle(updateArticle);
//then
Article actualArticle = jdbcArticleRepository.findArticleByIdx(updateArticle.getArticleIdx()).orElseThrow();
assertThat(actualArticle.getTitle()).isEqualTo(updateArticle.getTitle());
assertThat(actualArticle.getContent()).isEqualTo(updateArticle.getContent());
}
각 테스트 이후에 rollback 을 위해 @Transactional 을 사용해줬다.
junit에서 @Transactional 사용시 자동적으로 rollback 해준다.
근데 rollback 을 하는게 테이블을 다시 만드는게 아니기 때문에, 이때 articleIdx는 rollback을 한다고 해서 초기화 되지 않는다. 따라서 update 를 할때 articleIdx가 예상하는 값과 달라 해당 article의 수정에 실패하는 현상이 발생한다.
❗️즉 rollback이 테이블을 다시 만드는 것이 아니기 때문에, AUTO_INCREMENT 필드 값은 롤백이 발생해도 초기화되지 않는다.
위와같은 문제를 해결하기위해 각 테스트를 실행할때마다
namedParameterJdbcTemplate.getJdbcOperations().execute("ALTER TABLE ARTICLE AUTO_INCREMENT = 1");
위와 같은 명령어로 Article의 데이터 삭제 및 AUTO_INCREMENT 값을 1로 바꿔줬다.
'Spring' 카테고리의 다른 글
| Jasypt 를 통한 암호화 (2) | 2023.11.27 |
|---|---|
| checkedException, uncheckedException (1) | 2023.11.22 |
| @JdbcTest (0) | 2023.07.05 |
| @ActiveProfiles (0) | 2023.07.05 |
| [Spring] @RequestBody, @ModelAttribute (0) | 2023.04.24 |