사용자 도구

사이트 도구


springframework:spring_test_dbunit

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

  • 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.InsertIdentityOperationINSERT, CLEAN_INSERT 등을 사용해야 한다. 이를 위한 설정은 databaseOperationLookup=MicrosoftSqlDatabaseOperationLookup을 지정해주는 것이다.
    @DbUnitConfiguration(databaseConnection = ["dbUnitDatabaseConnection"], databaseOperationLookup = MicrosoftSqlDatabaseOperationLookup)
    class MyRepositoryTest extends Specification {
        ...
    }

참조

springframework/spring_test_dbunit.txt · 마지막으로 수정됨: 2020/07/08 14:04 저자 kwon37xi