상똥이의 Back-End 공부방

[Board Project] 6. 데이터베이스 연결 테스트 준비 (mokaroo/ MySQL/ JPA) 본문

프로젝트/게시판 만들기

[Board Project] 6. 데이터베이스 연결 테스트 준비 (mokaroo/ MySQL/ JPA)

상똥백 2023. 10. 9. 16:25

목차

1. 랜덤 데이터 생성 후 sql파일에 삽입

2. repository 생성

3. 테스트 클래스 준비

 

[1. 랜덤 데이터 생성]

- 랜덤 데이터를 생성해주는 사이트는 많지만  mockaroo를 이용해보기로 한다

- 전에 생성한 ERD를 참조하여 생성한다

- 노란색  표시에 유의하여 생성

- MySQL이 설치되어있어야 함

1. article 테이블 데이터

(1) title : 짧은 문장이므로 Sentence

(2) content : Paragraphs

(3) hashtag : Color, Null값을 허용하므로 blank=20% 설정

(4) createdAt, modifiedAt : Datetime중에서도 SQLtime으로 설정해야 오류가 발생하지 않는다

(5) createdBy, modifiedBy : First Name

(6) row : 123개의 게시글을 삽입할 예정이라 123

(7) Format : SQL

(8) Table Name : article (생성할 테이블 이름과 같게 작성) 

2. article_comment 테이블 데이터

(1) article_id : 123개의 게시글이 있으므로 게시글 id는 1~123 중 하나이다. 그러므로 댓글이 달릴 게시글의 게시글 id는 1~123 중 랜덤으로 설정해주면 된다.

(2) content : Paragraphs

(3) createdAt, modifiedAt : Datetime중에서도 SQLtime으로 설정해야 오류가 발생하지 않는다

(4) createdBy, modifiedBy : First Name

(5) row : 1000개의 게시글을 삽입할 예정이라 1000

(6) Format : SQL

(7) Table Name : article_comment (생성할 테이블 이름과 같게 작성) 

3. generate를 눌러 sql형 데이터들을 생성, 다운받는다

4. resource패키지에 data.sql이라는 sql파일을 하나 생성한다

- 만약 테스트시에 연결이 안되면 여기를 눌러 참고

[2. repository 작성]

1. main/java/프로젝트명 경로에 repository 패키지를 생성한다

 

2. repository 패키지 내에 ArticleRepository.interface와 ArticleCommentRepository.interface를 생성한다

- 역할 : 데이터베이스(데이터)와 상호 작용을 추상화하고 도메인 객체를 데이터베이스에 저장, 검색 및 수정

 

3. ArticleRepository에는 Article클래스를, ArticleComment에는 ArticleComment클래스를 import

 

4. 두 인터페이스 모두 JpaRepository<import 클래스명, Long>을 확장시킨다

- @Repository : 이미 구현체인 JpaRepository에 삽입되어 있으므로 생략 가능하다

코드 (접은 글)

더보기

ArticleRepository

package com.fastcampus.projectbord.repository;

import com.fastcampus.projectbord.domain.Article;
import org.springframework.data.jpa.repository.JpaRepository;

public interface ArticleRepository extends JpaRepository<Article, Long> {
}

ArticleCommentRepository

package com.fastcampus.projectbord.repository;

import com.fastcampus.projectbord.domain.ArticleComment;
import org.springframework.data.jpa.repository.JpaRepository;

public interface ArticleCommentRepository extends JpaRepository<ArticleComment, Long> {
}

 

[3. 테스트 클래스 준비]

1. test/java/프로젝트명 경로에 repository 패키지를 생성한 후 JpaRepositoryTest.class를 생성한다

- main과 test는 서로 경로를 맞춰주는 것이 국룰이기 때문이다

 

2. 테스트케이스 전체에 필요한 어노테이션을 삽입해준다

(1) @DisplayName("Jpa 연결 테스트")

(2) @Import(JpaConfig.class)

- 우리가 찾으려 하는 게시글 또는 댓글을 자동적으로 찾아올 것이다

(3) @DataJpaTest

- jpa 리포지토리를 사용할 수 있게 함

- H2 기반으로 데이터 엑세스를 테스트할 때 사용 (데이터베이스를 설정)

- JPA 관련 빈을 등록해서 테스트에서 사용할 수 있도록 한다

(4) 테스트할 리포지토리 불러오기

- private final로 articleRepository, articleCommentRepository 호출

- 생성자 파라미터에 각각 @Autowired를 삽입해 리포지토리들의 bean을 자동으로 주입하도록 한다

코드(접은 글)

더보기

JpaRepositoryTest

package com.fastcampus.projectbord.repository;

import com.fastcampus.projectbord.config.JpaConfig;
import com.fastcampus.projectbord.domain.Article;
import com.fastcampus.projectbord.domain.ArticleComment;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
import org.springframework.context.annotation.Import;

import java.util.List;

import static org.assertj.core.api.Assertions.assertThat;

@DisplayName("JPA 연결 테스트")
@Import(JpaConfig.class)
@DataJpaTest
class JpaRepositoryTest {
    private final ArticleRepository articleRepository;
    private final ArticleCommentRepository articleCommentRepository;

    public JpaRepositoryTest(
            @Autowired ArticleRepository articleRepository,
            @Autowired ArticleCommentRepository articleCommentRepository
    ) {
        this.articleRepository = articleRepository;
        this.articleCommentRepository = articleCommentRepository;
    }
}