フラット xml データセットで DAO をテストしようとしているときに、まったく同じ問題が発生しました。構成はDBunit + HSQLDB 2.2.8 + JUnit4 + Spring + JPA->すべて一緒につながる
java.sql.SQLIntegrityConstraintViolationException: integrity constraint violation: foreign key no parent; FK13EE6CE6F09A6AAC table: ****
を拡張するリスナーを実装することで、良い回避策を見つけましたAbstractTestExecutionListener
。各テストの前に実行するアクションのタイプを指定します。この場合は、外部キー制約を無効にします。
注: 構文は、使用する HSQLDB のバージョンによって異なる場合があります。
public class ForeignKeyDisabling extends AbstractTestExecutionListener {
@Override
public void beforeTestClass(TestContext testContext) throws Exception {
IDatabaseConnection dbConn = new DatabaseDataSourceConnection(
testContext.getApplicationContext().getBean(DataSource.class)
);
dbConn.getConnection().prepareStatement("SET DATABASE REFERENTIAL INTEGRITY FALSE").execute();
}
}
次に、テストで既に配置されているコレクションにこのリスナーを追加するだけです。
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({"applicationContext-test.xml"})
@TestExecutionListeners({DependencyInjectionTestExecutionListener.class, DataSetTestExecutionListener.class, ForeignKeyDisabling.class})