여니의 프로그래밍 study/Spring & Spring Boot

[스프링부트] Spring boot JPA 테스트 코드 작성하기

여니's 2022. 3. 21. 17:34

 

Posts.java


-> Entity 클래스입니다. 

 

package com.yeony.web.springbootwebproject.domain.posts;

import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

import javax.persistence.*;

@Getter
@NoArgsConstructor
@Entity
public class Posts {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(length = 500,nullable = false)
    private String title;

    @Column(columnDefinition = "TEXT",nullable = false)
    private String content;

    private String author;

    @Builder // control + Enter = 생성자 자동완성
    public Posts(String title, String content, String author) {
        this.title = title;
        this.content = content;
        this.author = author;
    }
}

PostsRepository.java

-> Posts 클래스로 DB에 접근하기 위해 필요한 JpaRepository입니다.

Entity 클래스와 Repository는 함께 위치해있어야 합니다.

Entity 클래스는 기본 Repository 없이는 제대로 역할을 할 수가 없습니다.

 

따라서 Entity와 기본 Repository는 항상 domain 패키지에서 함께 관리합니다! 

package com.yeony.web.springbootwebproject.domain.posts;

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

public interface PostsRepository extends JpaRepository<Posts,Long> {

}

 


 

PostsRepositoryTest.java

-> save, findAll() 기능을 테스트 하는 클래스입니다. 

package com.yeony.web.springbootwebproject.domain.posts;

import org.junit.After;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import java.util.List;

import static org.assertj.core.api.Assertions.assertThat;
@RunWith(SpringRunner.class)
@SpringBootTest
public class PostsRepositoryTest {
    @Autowired
    PostsRepository postsRepository;

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

    @Test
    public void 게시글저장_불러오기(){
        //given
        String title="테스트 게시글";
        String content="테스트 본문";
        postsRepository.save(Posts.builder()
                        .title(title)
                        .content(content)
                        .author("yeony@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);
    }

}

참고서적 및 링크

: 스프링 부트와 AWS로 혼자 구현하는 웹 서비스