====== 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 테스트 해보기 - 우아한형제들 기술 블로그]]