게시판 만들기 -5 / JPA, 데이터베이스 연결-2

패스트 캠퍼스 강의 게시판 만들기를 따라하며 백엔드 스킬을 늘려보자.

  1. 프로젝트 관리
  2. JPA Test 시 알아야하는 사항
  3. 공부해야 할 항목
  4. 참고

프로젝트 관리

프로젝트 관리 문서

JPA Test 시 알아야하는 사항

@DisplayName("update 테스트")
    @Test
    void givenTestData_whenUpdating_thenWorksFine()
    {
        // Given
        Article article = articleRepository.findById(1L).orElseThrow();
        String updatedHashtag = "#springboot";
        article.setHashtag(updatedHashtag);
        // When
        Article savedArticle = articleRepository.save(article);
        // # --------------
        Article savedArticle = articleRepository.saveAndFlush(article);
        // Then
        assertThat(savedArticle)
                .hasFieldOrPropertyWithValue("hashtag",updatedHashtag);
    }

위 테스트를 시작하고 업데이트 쿼리가 나오는지 확인을 해보면 업데이트 쿼리가 나오지 않는것을 확인할 수 있는데 이 이유는, @DataJpaTest 어노테이션으로 인해 테스트를 돌릴때 이 안에 있는 모든 테스트 메소드들은 메소드 단위로 자동으로 트랜잭션 이 걸려 있습니다.

테스트를 돌릴때 트랜잭션의 값은 기본적으로 rollback으로 동작합니다. 그래서 위 메소드에서 실제로 이 안에서의 변경점이 롤백에 의해 중요하지않다고 판단되면 테스트 메소드를 생략하고 진행하게 됩니다.

업데이트 메소드를 실행했을때 영속성으로 부터 들고오는 데이터를 그냥 세이브하고 추가적인 작업을 진행하지 않는다면 결과는 롤백으로 돌아갈것이므로 flush()를 호출해서 저장을 해줘야 합니다.. saveAndFlush()를 이용하면 테스트는 정상적으로 돌아가고 로그도 제대로 보이지만 트랜잭션으로 인해 결과를 되돌아갑니다.

공부해야 할 항목

  • assertThat 관련된 내용
  • 테스트 GWT,G-WT
  • Slice 테스트
  • h2 compatibility mode
  • SpringBoot application-properties

    참고

테스트 데이터 만드는 사이트 - mockaroo