본문 바로가기
seok

테스트용-데이터베이스를 임베디드 모드

by shulk 2024. 5. 31.

H2 데이터베이스를 임베디드 모드

 

애플리케이션 클래스안에 빈으로 등록해준다(프로필이 테스트니 테스트에 있는 프로퍼티스에서 프로필 설정 해준다)

	@Bean
	@Profile("test")
	public DataSource dataSource() {
		log.info("메모리 데이터베이스 초기화");
		DriverManagerDataSource dataSource = new DriverManagerDataSource();
		dataSource.setDriverClassName("org.h2.Driver");
		dataSource.setUrl("jdbc:h2:mem:db;DB_CLOSE_DELAY=-1");
		dataSource.setUsername("sa");
		dataSource.setPassword("");
		return dataSource;
	}

근데 이러고 예를들어 데이터 저장 테스트 실행해보면 오류가 난다. 이유는 테이블이 존재하지 않아서.

그러므로 테스트 위치인

src/test/resources 에 꼭 이 이름으로 schema.sql 파일 생성후 밑에 테이블 생성 sql 적어주면된다.

(밑에 테이블 sql문은 강의 예시 테이블) 

drop table if exists item CASCADE;
create table item
(
 id bigint generated by default as identity,
 item_name varchar(10),
 price integer,
 quantity integer,
 primary key (id)
);

 

 

근데 알고보니 이렇게 하는것도 귀찮아서 스프링 부트는 자동으로 임베디드 모드 데이터베이스 해준다.

테스트에 있는 properties에 db설정 주석처리해주고,테스트 파일 클래스에 @Transactional만 해주면 된다

'seok' 카테고리의 다른 글

결합도와 응집도  (0) 2024.06.25
프로젝트 MyBatis  (0) 2024.06.03
Querydsl프로젝트 설정,여러팁/비공개  (0) 2024.03.27