====== Spring Test DBUnit ======
* [[https://github.com/ppodgorsek/spring-test-dbunit|ppodgorsek/spring-test-dbunit]] : 새로운 포크
* [[http://springtestdbunit.github.io/spring-test-dbunit/|Spring Test DBUnit]] : 더이상 유지 안됨.
* [[java:junit:database_rider|database-rider]] 사용 권장.
* [[java:junit:dbunit|DBUnit]]과 Spring을 쉽게 연동할 수 있게 해준다.
===== MySQL Multiple Schema 지원 기본 설정 =====
@Bean
public DatabaseConfigBean dbUnitDatabaseConfig() {
DatabaseConfigBean config = new DatabaseConfigBean();
config.setQualifiedTableNames(true); // schema 지원
config.setMetadataHandler(new MySqlMetadataHandler()); // MySQL 에서 MetaData를 올바로 읽으려면 필요
config.setDatatypeFactory(new MySqlDataTypeFactory());
return config;
}
@Bean
public DatabaseDataSourceConnectionFactoryBean dbUnitDatabaseConnection(DataSource dataSource) {
final DatabaseDataSourceConnectionFactoryBean dbUnitDatabaseConnection =
new DatabaseDataSourceConnectionFactoryBean();
dbUnitDatabaseConnection.setDataSource(dataSource);
dbUnitDatabaseConnection.setDatabaseConfig(dbUnitDatabaseConfig())
return dbUnitDatabaseConnection;
}
// 실제 테스트에서는
// Spring Application 기본 설정... 이후
@TestExecutionListeners({DependencyInjectionTestExecutionListener.class,
DirtiesContextTestExecutionListener.class,
TransactionalTestExecutionListener.class,
DbUnitTestExecutionListener.class})
@DatabaseSetups({
@DatabaseSetup(value = "dataset.xml", type = DatabaseOperation.TRUNCATE_TABLE),
@DatabaseSetup(value = "dataset.xml", type = DatabaseOperation.CLEAN_INSERT)
})
@DbUnitConfiguration(databaseConnection = "dbUnitDatabaseConnection")
public class DatabaseTest {
...
}
''@DatabaseSetup''에서 테스트 클래스와 다른 패키지에 있는 파일을 로딩하려면 ''/package/path/to/dataset.xml'' 형태로 전체 패키지를 기술해주면 된다.
FlatXML 에서는 ''schemaName.tableName'' 형태로 기입해줘야한다.
===== MS SQLServer =====
* multiple catalog 지원이 제대로 안됨.
* test context 에 대해서는 ''DatabaseDataSourceConnectionFactoryBean''을 카탈로그 별로 따로 따로 생성해서 처리할 필요가 있어보임.
* 다중 설정
@DatabaseSetups({
@DatabaseSetup(value = "insert.xml")
@DatabaseSetup(connection="customerDataSource", value="insert-custs.xml", type = DatabaseOperation.CLEAN_INSERT)
})
* Insert Operation의 경우 ''org.dbunit.ext.mssql.InsertIdentityOperation''의 ''INSERT'', ''CLEAN_INSERT'' 등을 사용해야 한다. 이를 위한 설정은 ''databaseOperationLookup=MicrosoftSqlDatabaseOperationLookup''을 지정해주는 것이다.
@DbUnitConfiguration(databaseConnection = ["dbUnitDatabaseConnection"], databaseOperationLookup = MicrosoftSqlDatabaseOperationLookup)
class MyRepositoryTest extends Specification {
...
}
===== 참조 =====
* https://github.com/anyjava/spring-boot-dbunit
* [[http://woowabros.github.io/experience/2019/11/06/db-unit.html|스프링부트에서 DbUnit 을 이용하여 DB 테스트 해보기 - 우아한형제들 기술 블로그]]