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 |