我在尝试使用平面 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})