728x90
1. 테스트 - 데이터베이스 연동
- 데이터 접근 기술은 실제 데이터베이스에 접근해서 데이터를 잘 저장하고 조회할 수 있는지 확인하는 과정이 필요
- test case는 src/test에 있기 때문에, test 실행시 src/test 내부 application.properties 파일이 우선순위를 가지고 실행
- 해당 설정 파일에도 spring.datasource.url 같은 db 연결 설정 필요
- 만약 main의 application.properties의 설정을 그대로 사용하고 싶으면 test/resources 패키지에 application.properties 파일 자체가 존재하지 않아야 사용 가능
1.1. h2 db datasource 설정 등록
- test/resources/application.properties
spring.profiles.active=test
# db 연결
spring.datasource.url=jdbc:h2:tcp://localhost/~/test # 동일한 h2 db 사용
spring.datasource.username=sa
# password 등록 안했을 시, 생략 가능
# sql문 log 확인 설정
logging.level.org.springframework.jdbc=debug
1.2. @SpringBootTest
- @SpringBootTest는 @SpringBootApplication을 찾아서 springContainer 설정으로 사용
- @SpringBootApplication 이 존재하는 class의 @Import 또한 주입 받는다.
package hello.itemservice;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
// main의 @SpringBootApplication 존재하는 class를 찾아서 동일하게 동작
class ItemServiceApplicationTests {
@Test
void contextLoads() {
}
}
2. test - database 분리
- 문제
- local에서 사용하는 appServer와 test에서 같은 db를 사용하고 있으니 test에서 문제가 발생
- 해당 문제를 해결하기 위해서 test를 다른 환경과 철저하게 분리
- 해결 방안
- 테스트 전용 db를 별도로 운영
- h2 같은 경우 인베디드memory db를 이용 (springboot default 설정 값 )
2.1. 테스트 전용 db 운영
- H2 데이터베이스 용도에 따라 2가지로 구분
- 서버용 db : jdbc:h2:tcp://localhost/~/test
- test용 db : jdbc:h2:tcp://localhost/~/testcase
- 데이터베이스 파일 생성 방법
- db 서버 완전히 종료 후 재 시작
- jdbc url : jdbc:h2:~/testcase (최초 한번) - schema 생성 과정이라 보면 된다.
- 파일 생성 확인
- ~ 경로에서 ls -arlth -> testcase.mv.db 파일 생성 확인
- jdbc url : jdbc:h2:tcp://localhost/~/testcase 접속 - schema를 생성 했으므로 local 경로로 실제 db server 접근 필요
spring.profiles.active=test
# db 연결 - test -> testcase 변경
spring.datasource.url=jdbc:h2:tcp://localhost/~/testcase
spring.datasource.username=sa
logging.level.org.springframework.jdbc=debug
- 남은 문제점
- save로 인해서 저장된 data로 반복되는 test 수행 불가
- 해결 방안
- transaction 원리를 이용
2.2. test 중요 원칙
- test는 다른 test와 격리해야 한다. - db 분리, 인베디드 db 사용
- test는 반복해서 실행할 수 있어야 한다. - clear(), @Transactional
참고 발행글 : 2023.09.25 - [spring/spring db2] - 3. 데이터 접근 기술 - 테스트