개요.
단위테스트, 통합테스트 코드를 작성하면서, 한 가지 의문점이 생겼다. 로컬 환경에서 테스트 할 때는 더미데이터를 직접 넣어둔 상태로 테스트를 진행했다.(혹은 테스트코드 앞단에 Rollback(false)로 하여 삽입) 하지만, sql파일을 프로젝트에 넣어두고 실행하는 것으로 더미데이터를 생성할 수 있다.
환경
- Spring Boot 2.4.4
- Junit5
- h2 DB (In-memory)
gradle dependency
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
implementation 'org.springframework.boot:spring-boot-starter-web'
runtimeOnly 'com.h2database:h2'
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
implementation('org.springframework.boot:spring-boot-starter-validation')
testImplementation('org.springframework.boot:spring-boot-starter-test') {
exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
}
}
data.sql 파일
파일은 test/db/h2 디렉토리 아래에 data.sql이라는 이름으로 생성.
내부코드는 다음과 같다.
INSERT INTO user (create_time, city,detail, street, email, birthday, grade, point, status, name, nickname ,password)VALUES
('2021-04-27 11:01:48.594485', 'seoul', 'room 11673', '1673street', 'user1673@naver.com', '2013-03-08', 2, 1000, 'ACTIVE', 'Clone1673', 'nick1673', '12341234'),
('2021-04-27 11:01:50.376906', 'seoul', 'room 199716', '99716street', 'user99716@naver.com', '1994-11-18', 2, 1000, 'ACTIVE', 'Clone99716', 'nick99716', '12341234');
INSERT INTO orders VALUES (1, '2021-04-27 11:01:50.562911', 'DELIVERY', 1, '치킨 같이 시켜 먹어요!', '2021-04-27 15:01:50.464900', 32000, 0, NULL, 0, '치킨먹을사람~', 1);
INSERT INTO comment (comment_id, create_time, content, status, order_id, user_id) VALUES
(4, '2021-04-27 11:01:50.719477', '댓글 작성 합니다', 'NORMAL', 1, 2);
INSERT INTO party VALUES
(3, '2021-04-27 11:01:50.604911', '글 게시자 본인 입니다.', 6000, 'JOIN', 1, 1);
INSERT INTO tag VALUES
(1, '치킨', 1),
(2, '음식', 1);
Heidi SQL의 sql export 기능으로 가져왔다가 테이블 명에 " << 때문에 고생했다.(`,'," 꼭 주의하도록 하자!)
application.yml 파일
spring:
output:
ansi:
enabled: always #로그 색상추가
datasource:
driver-class-name: org.h2.Driver # h2 드라이버 설정
url: jdbc:h2:mem:testdb # jdbc url 설정 (in-memory db 설정)
username: sa
password:
platform: h2 # datasource 타입 플랫폼 정의
data: classpath:db/h2/data.sql # 앞서 작성한 sql 파일경로
jpa:
database-platform: org.hibernate.dialect.H2Dialect # 방언설정
properties:
hibernate:
ddl-auto: none
show_sql: true #sql 문이 보이도록
format_sql: true #sql 계층식 표현
테스트 코드
@SpringBootTest
public class InmemoryTest {
@Autowired
private UserService userService;
@Test
@DisplayName("유저 데이터 조회")
public void init() {
List<UserResponse>userList = userService.findAll();
userList.forEach(System.out::println);
}
}
실행 결과
이제 위 설정으로 spring 구동시에 sql파일에서 선언한 내용이 자동으로 적용되는것을 확인할 수 있다.
728x90
'[IT] > SpringBoot' 카테고리의 다른 글
[Spring Boot] 설정파일 암호화 (application.yml) (0) | 2021.04.28 |
---|---|
[Spring Boot] Controller - Dto 유효성 검사 (0) | 2021.04.19 |
[Spring Boot] Junit5 테스트 순서 지정 (0) | 2021.04.18 |
[Spring Boot] JPA metamodel must not be empty 에러 (0) | 2021.04.16 |
[Data JPA & Query DSL] Repository의 구현클래스 선정 규칙 (0) | 2021.04.03 |