상똥이의 Back-End 공부방
[Board Project] 6. 데이터베이스 연결 테스트 준비 (mokaroo/ MySQL/ JPA) 본문
목차
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;
}
}
'프로젝트 > 게시판 만들기' 카테고리의 다른 글
[Board Project] 8. 메타데이터 공동 필드 추출하기 (0) | 2023.10.11 |
---|---|
[Board Project] 7. 데이터베이스 연결 테스트 (JPA/ assertj) (2) | 2023.10.09 |
[Board Project] 5. 데이터베이스 연동하기(2) (annotation/ JPA) (0) | 2023.09.05 |
[Board Project] 4. 데이터베이스 연동하기 (MySQL/ JPA) (0) | 2023.09.05 |
[Board Project] 3. 도메인 설계 (ERD작성/ 자바 코드 작성) (0) | 2023.09.05 |