목차

Spring Test DBUnit

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 형태로 기입해줘야한다.

<?xml version="1.0" encoding="UTF-8"?>
<dataset>
	<myschema.article id="123" title="hello" regDttm="2016-09-28 09:20:22.000000" />
</dataset>

MS SQLServer

참조