Skip to content
This repository has been archived by the owner on May 19, 2024. It is now read-only.

[BM-113] TestContainer를 적용한 테스트 환경 구축 #9

Merged
merged 6 commits into from
Jul 26, 2022

Conversation

youngjunryu
Copy link
Collaborator

@youngjunryu youngjunryu commented Jul 26, 2022

주요 사항

  • 테스트를 위해서는 운영과 동일한 형태의 개발 환경에서 테스트 하는 것이 중요한데, 기존의 H2 DB를 사용하게 되면 운영 DB인 MySQL과 100% 호환된다는 보장이 없어 TestContainer 라이브러리를 도입하게 되었습니다.
  • TestContainer 라이브러리 : 테스트에서 도커 컨테이너를 자동으로 띄워주고 테스트가 종료되면 컨테이너도 종료해주는 라이브러리
  • 이 라이브러리리의 유일한 단점은 컨테이너를 생성, 삭제하기 때문에 테스트가 느려진다는 것이 있습니다.

테스트 하는 법

  • Docker가 로컬 환경에 설치되어있어야 합니다.
  1. 엔티티별 테이블 생성 sql과 필요에 의하면 data sql 스크립트 작성
  2. 아래 네 개 애노테이션 삽입
  • @Sql : 테스트코드 실행되기 전에 설정된 테이블 생성 sql(+ 초기 데이터) 스크립트를 실행할 수 있게 해줌
  • @AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE) : 내장 DB를 사용하지 않는 것으로 설정하여 docker MySQL를 사용
  1. 기존과 동일한 방식으로 테스트 코드 작성
@Sql("/sql/schema.sql")
@DataJpaTest
@ActiveProfiles("test")
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
public class XXRepositoryTest {

  @Autowired
  XXRepository xxRepository;
  
  @Test
  void test() {
    // Test Code 작성
  }
}

리뷰 받고 싶은 부분

  • 하영님이 작성하신 Product, Image 엔티티의 테이블 생성 sql를 작성하였습니다.
    잘못된 부분과 컨벤션 맞추고 싶은 부분 있으면 피드백 부탁드립니다.

Comment on lines 1 to 4
spring:
h2:
console:
enabled: true
jpa:
show-sql: true
hibernate:
ddl-auto: update
properties:
hibernate:
dialect: org.hibernate.dialect.H2Dialect
format_sql: true
datasource:
driver-class-name: org.testcontainers.jdbc.ContainerDatabaseDriver
url: jdbc:tc:mysql:8:///
Copy link
Member

@waterfogSW waterfogSW Jul 26, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

application-test.yml파일을 test폴더로 옮기면 동작에 문제가 있을까요?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

동작되어서 수정했습니다!

Comment on lines 1 to 22
CREATE TABLE `product` (
id bigint not null auto_increment,
title varchar(16) not null,
description varchar(500) not null,
minimum_price int not null,
category varchar(100) not null,
location varchar(100),
expire_at datetime not null,
created_at datetime,
updated_at datetime,
primary key (id)
);

CREATE TABLE `image` (
id bigint not null auto_increment,
product_id bigint,
url varchar(512) not null,
`order` int not null,
created_at datetime,
updated_at datetime,
primary key (id)
);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

자동 포멧팅 한번 돌리면 좋을것 같습니다.👍

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

넵 알겠습니다!

Copy link
Member

@waterfogSW waterfogSW Jul 26, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

image 에 외래키 빠진것 같습니다!

CONSTRAINT fk_product_id_for_image FOREIGN KEY (product_id) REFERENCES `product` (id) ON DELETE RESTRICT ON UPDATE RESTRICT

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

우어어 감사합니다

Copy link
Member

@dojinyou dojinyou left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍

Copy link
Member

@UJ15 UJ15 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍

@youngjunryu youngjunryu merged commit 09871bc into main Jul 26, 2022
@youngjunryu youngjunryu deleted the BM-113 branch July 26, 2022 09:38
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants