티스토리 뷰
사용목적
기존에는 테스트에 필요한 데이터를 data.sql로 관리
- 테스트끼리 같은 데이터를 사용하면 테스트에 실패할 수 있음
- 테스트마다 데이터를 다른 데이터를 사용해도 되지만 관리가 어려워짐
DBUnit을 적용하면...
- 테스트 실행 전, 후에 작성한 xml로 디비의 데이터를 변경(데이터 변경을 신경 쓰지 않아도 됨)
문제점
- DbUnit 과 SpringTestDbUnit 모두 스프링처럼 기업에서 관리되는 프로젝트가 아님
- Spring에서 제공하는 test contaniner를 적용해본다. (https://www.baeldung.com/docker-test-containers))
의존성
testImplementation 'org.dbunit:dbunit:2.6.0'
testImplementation 'com.github.springtestdbunit:spring-test-dbunit:1.3.0'
Bean 등록
@Configuration
public class TestConfig {
@Bean
public DatabaseConfigBean dbUnitDatabaseConfig() {
DatabaseConfigBean config = new DatabaseConfigBean();
config.setAllowEmptyFields(true);
config.setDatatypeFactory(new H2DataTypeFactory());
return config;
}
@Bean
public DatabaseDataSourceConnectionFactoryBean dbUnitDatabaseConnection(DataSource dataSource) {
DatabaseDataSourceConnectionFactoryBean dbUnitDatabaseConnection = new DatabaseDataSourceConnectionFactoryBean();
dbUnitDatabaseConnection.setDataSource(dataSource);
dbUnitDatabaseConnection.setDatabaseConfig(dbUnitDatabaseConfig());
return dbUnitDatabaseConnection;
}
}
DBUnit 사용하기
@Import(TestConfig.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@TestExecutionListeners({
DbUnitTestExecutionListener.class,
DependencyInjectionTestExecutionListener.class
})
@DbUnitConfiguration(databaseConnection = "dbUnitDatabaseConnection")
@DatabaseSetup(value = {"user.xml"}, type = DatabaseOperation.CLEAN_INSERT)
@DatabaseTearDown(value = {"user.xml"}, type = DatabaseOperation.DELETE_ALL)
public class DBUnitTest {
출처
http://woowabros.github.io/experience/2019/11/06/db-unit.html
'Web' 카테고리의 다른 글
웹 앱에 Kakao 지도 API 사용하기 (0) | 2020.01.07 |
---|---|
Json Web Token (0) | 2019.12.29 |
댓글