Spring Test DBUnitでJSONカラムにデータを投入する
Spring Test DBUnitで @DatabaseSetup
を使用してテストデータを投入する際に、対象のテーブルにJSONカラムが存在すると失敗するが、PostgresqlDataTypeFactoryを拡張することで投入できるようになる。
環境
- Spring Boot 1.4.1
- Spring Boot Test Starter
- Spring Test DBUnit 1.3.0
- PostgreSQL 9.5
PostgresqlDataTypeFactoryの拡張
DBUnitのFeature RequestsにJSONカラムに対応するための以下の2つのクラスが置いてある。※ステータスがpendingであることに注意
https://sourceforge.net/p/dbunit/feature-requests/188/
JSONBに対応していないので、PostgresqlDataTypeFactory.javaの一部を修正する。
public DataType createDataType(int sqlType, String sqlTypeName) throws DataTypeException { // 省略 if ("json".equals(sqlTypeName) || "jsonb".equals(sqlTypeName) /* ←を追加*/ ) { return new JsonType() } // 省略 }
Configurationクラスの修正
上の2つのクラスを適当なパッケージに配置後、Configurationクラスの修正を行う。
@Configuration public class TestConfig { @Bean public DataSource dataSource() { // 省略 } @Bean public DatabaseConfigBean dbUnitDatabaseConfig() { DatabaseConfigBean dbConfig = new DatabaseConfigBean(); dbConfig.setDatatypeFactory(new PostgresqlDataTypeFactory()); return dbConfig; } @Bean public DatabaseDataSourceConnectionFactoryBean dbUnitDatabaseConnection() { DatabaseDataSourceConnectionFactoryBean dbConnection = new DatabaseDataSourceConnectionFactoryBean(dataSource()); dbConnection.setDatabaseConfig(dbUnitDatabaseConfig()); return dbConnection; } }
これでJSONデータの投入が可能となる。