이 글은 '스프링 부트와 AWS로 혼자 구현하는 웹 서비스' 책을 참고하여 작성되었습니다.

1. Repository(DB Layer 접근자)


PostsRepository.java

import org.springframework.data.jpa.repository.JpaRepository;

public interface PostsRepository extends JpaRepository<Posts, Long> {

}

아주 간단하게 annotation 없이도 생성이 가능하다. 그저 JpaRepository<Entity 클래스, PK 타입>을 상속하는 인터페이스를 만들면 CRUD 메서드가 자동으로 생성된다.
그리고 꼭 Entity 클래스(여기서는 Posts.java)가 함꼐 위치해야한다. 따라서 도메인 패키지에서 함께 관리한다.

2. PostsRepositoryTest.java

save, findAll 기능을 테스트 하는 유닛 테스트 코드를 작성해보자.


@ExtendWith(SpringExtension.class)
@SpringBootTest
public class PostsRepositoryTest {

    @Autowired
    PostsRepository postsRepository;

    @AfterEach
    public void cleanup() {
        postsRepository.deleteAll();
    }

    @Test
    public void 게시글저장_불러오기() {
        //given
        String title = "테스트 게시글";
        String content = "테스트 본문";

        postsRepository.save(Posts.builder()
                .title(title)
                .content(content)
                .author("chaejm55@gmail.com")
                .build());

        //when
        List<Posts> postsList = postsRepository.findAll();

        //then
        Posts posts = postsList.get(0);
        assertThat(posts.getTitle()).isEqualTo(title);
        assertThat(posts.getContent()).isEqualTo(content);
    }

    @Test
    public void BaseTimeEntity_등록() {
        //given
        LocalDateTime now = LocalDateTime.of(2019, 6, 4, 0, 0, 0);
        postsRepository.save(Posts.builder()
                .title("title")
                .content("content")
                .author("author")
                .build());

        //when
        List<Posts> postsList = postsRepository.findAll();

        //then

        Posts posts = postsList.get(0);

       System.out.println(">>>>>>>>> createDate="+posts.getCreatedDate()+", modifiedDate="+posts.getModifiedDate());

       assertThat(posts.getCreatedDate()).isAfter(now);
       assertThat(posts.getModifiedDate()).isAfter(now);
    }
}
  • @AfterEach: Junit4에서는 @After로 사용되었다. 단위 테스트가 끝날 때마다 수행되는 메서드를 지정하며 테스트간 데이터 침범을 막기위해 사용된다. h2에 남은 데이터를 삭제해 테스트 실패를 방지해준다.
  • postsRepository.save: 테이블 posts에 insert/update 쿼리를 실행한다.
  • postsRepository.findAll: 테이블 posts에 있는 모든 데이터를 조회해온다.

src/main/resources/application.properties에 spirng.jpa.show_sql=true를 사용하면 콘솔에서 쿼리 로그를 확인할 수 있다. 또한 이 쿼리로그를 MySQL 버전으로 변경하려면 spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL57Dialect
spring.jpa.properties.hibernate.dialect.storage_engine=innodb
를 입력하면 된다.

profile
여러가지를 시도하는 학생입니다

0개의 댓글