@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>
DatabaseDataSourceConnectionFactoryBean
을 카탈로그 별로 따로 따로 생성해서 처리할 필요가 있어보임.@DatabaseSetups({ @DatabaseSetup(value = "insert.xml") @DatabaseSetup(connection="customerDataSource", value="insert-custs.xml", type = DatabaseOperation.CLEAN_INSERT) })
org.dbunit.ext.mssql.InsertIdentityOperation
의 INSERT
, CLEAN_INSERT
등을 사용해야 한다. 이를 위한 설정은 databaseOperationLookup=MicrosoftSqlDatabaseOperationLookup
을 지정해주는 것이다.@DbUnitConfiguration(databaseConnection = ["dbUnitDatabaseConnection"], databaseOperationLookup = MicrosoftSqlDatabaseOperationLookup) class MyRepositoryTest extends Specification { ... }