?????????????????????????????????????μ???????????????伶?????ò????????á?????StackOverflow????????????????????д????????AbstractTestExecutionListener????beforeTestClass??????????????????????£?

import org.dbunit.database.DatabaseDataSourceConnection;
import org.dbunit.database.IDatabaseConnection;
import org.springframework.test.context.TestContext;
import org.springframework.test.context.support.AbstractTestExecutionListener;

import javax.sql.DataSource;

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();

    }
}

??????????μ?Listener?????????????У?

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext-test.xml")
@TestExecutionListeners({
        DependencyInjectionTestExecutionListener.class??
        DirtiesContextTestExecutionListener.class??
        TransactionDbUnitTestExecutionListener.class??
        ForeignKeyDisabling.class})

?????ο???http??//stackoverflow.com/questions/2685274/tdd-with-hsqldb-removing-foreign-keys

????????PROPERTY_DATATYPE_FACTORY????????

??????jenkins?й???????????????????μ?????????

????WARN   getDataTypeFactory?? Potential problem found?? The configured data type factory 'class org.dbunit.dataset.datatype.DefaultDataTypeFactory' might cause problems with the current database 'HSQL Database Engine' (e.g. some datatypes may not be supported properly). In rare cases you might see this message because the list of supported database products is incomplete (list=[derby]). If so please request a java-class update via the forums.If you are using your own IDataTypeFactory extending DefaultDataTypeFactory?? ensure that you override getValidDbProducts() to specify the supported database products.

??????????????????DataTypeFactory????????????????????????????????????????????????????????????PROPERTY_DATATYPE_FACTORY????????????????Before??BeforeClass?????????ExecutionListener?ж?????????????????á?

????????????????????????λ??????????????????????????????????????????DbUnitTestExecutionListener.prepareDatabaseConnection?л?????????????????????????????????????????????????á???????????????д????????????????

??????????????

????CustomTransactionDbUnitTestExecutionListener?? ???????DbUnitTestExecutionListener???????????????????????·????DbUnitTestExecutionListener????

private void prepareDatabaseConnection(TestContext testContext?? String databaseConnectionBeanName) throws Exception {
        Object databaseConnection = testContext.getApplicationContext().getBean(databaseConnectionBeanName);
        if (databaseConnection instanceof DataSource) {
            databaseConnection = DatabaseDataSourceConnectionFactoryBean.newConnection((DataSource) databaseConnection);
        }
        Assert.isInstanceOf(IDatabaseConnection.class?? databaseConnection);
 <SPAN style="COLOR: #33cc00">((IDatabaseConnection)databaseConnection).getConfig().setProperty(DatabaseConfig.PROPERTY_DATATYPE_FACTORY?? new HsqldbDataTypeFactory());
</SPAN>        testContext.setAttribute(CONNECTION_ATTRIBUTE?? databaseConnection);
    }