Test 코드를 작성 할 때 DB 환경을 분리해 왔습니다.
하지만 초기 설정 때 마다 기억이 잘 나지않아 이번에 Dev 와 Test 를 분리하는 방법을 기록하려 합니다.
이 프로젝트는 gradle 환경이며 yaml 파일을 사용 중입니다.
이번 게시글의 목표는 Dev - Sqlite , Test - h2 를 사용해 실행 확인을 마치는 것입니다.
application.yaml
먼저 Dev 환경의 DB 설정입니다.
개인 프로젝트이기 때문에 sqlite 를 사용 하고 있습니다.
spring:
datasource:
url: jdbc:sqlite:db.sqlite
driver-class-name: org.sqlite.JDBC
jpa:
hibernate:
ddl-auto: create
show-sql: true
database-platform: org.hibernate.community.dialect.SQLiteDialect
defer-datasource-initialization: true
sql:
init:
mode: always
build.gradle
h2 를 사용하기 위해 의존성을 추가해 줍니다.
//H2
runtimeOnly 'com.mysql:mysql-connector-j'
implementation 'com.h2database:h2'
application-test.yaml
test 를 위한 yaml 을 만들어 줍니다.
application-{..프로퍼티 명..}.yaml 형태로 만들어야 원하는 동작을 기대할 수 있으니 주의해 주세요!
spring:
datasource:
url: jdbc:h2:mem:testdb
username: sa
password:
driver-class-name: org.h2.Driver
jpa:
hibernate:
ddl-auto: create
properties:
hibernate:
format_sql: true
sql:
init:
mode: always
Test
test 코드에서, application-test.yaml 을 사용하도록 test 클래스에 @ActiveProfiles("test") 를 명시 해 줍니다.
@ActiveProfiles("test") 여기서 test 는 이전 단계에 생성해 주었던 application-test.yaml 입니다.
@SpringBootTest
@Transactional
@ActiveProfiles("test")
class JobRepositoryTest {
@Autowired
JobRepository jobRepository;
... 생략 ...
@BeforeEach
public void init() {
jobRepository.save(new Job(1, 1,"카카오","BE",100000,"BE 포지션","Java","KOR","PUS",new ArrayList<>()));
}
@DisplayName("공고 저장 테스트")
@Test
void save() {
// given
Job job = new Job(2, 1, "카카오", "BE", 100000, "BE 포지션", "Java", "KOR", "PUS", new ArrayList<>());
// when
Job saveJob = jobRepository.save(job);
// then
assertThat(jobRepository.findAll().size()).isEqualTo(2);
assertThat(jobRepository.findById(jobSequence).get().getId()).isEqualTo(saveJob.getId());
}
}
여기까지 설정을 마친 후 테스트를 실행하면 h2 DB 가 연결 되었음을 확인할 수 있습니다,
또한 로그를 살펴보면 아래와 같이 SQL 문이 잘 실행이 됐고,
테스트도 문제 없이 통과하였음을 확인할 수 있습니다.
감사합니다!!
'Spring' 카테고리의 다른 글
[ Springboot ] Swagger 설정 및 접속 ( + Swagger Spring Security 설정 ) (0) | 2023.10.17 |
---|---|
[Spring] 필드 에러 메세지 표출하기 ( + Thymeleaf) (0) | 2023.06.18 |
[ Spring ] application.properties에 DB 정보 추가하기 (0) | 2023.05.24 |
[Thymeleaf] 타임리프 문법 (0) | 2023.04.16 |
[Spring] Port 8080 was already in use , Port 에러 해결하기 2 (0) | 2023.03.27 |