DBUnit:如何仅在失败时刷新?

发布于 2024-07-27 20:32:00 字数 1527 浏览 8 评论 0原文

我正在使用 DBUnit 来测试 Spring/Hibernate 持久性。

我创建了一个抽象测试:

public abstract class AbstractTestCase extends
    AbstractTransactionalDataSourceSpringContextTests {

    @Override
    protected String[] getConfigLocations() {
        return new String[] { 
                "classpath:/applicationContext.xml",
                "classpath:/testDataSource.xml" };
    }
    @Override
    protected void onSetUpInTransaction() throws Exception {
        DataSource dataSource = jdbcTemplate.getDataSource();
        Connection con = DataSourceUtils.getConnection(dataSource);

        boolean validateSchemaExists = true;
        IDatabaseConnection dbUnitCon = new DatabaseConnection(con,
                "MHADB_TEST", validateSchemaExists);

        DatabaseConfig dbUnitConConfig = dbUnitCon.getConfig();
        dbUnitConConfig.setProperty(DatabaseConfig.PROPERTY_DATATYPE_FACTORY,
                new OracleDataTypeFactory());

        boolean enableColumnSensing = true;
        boolean enableDTDMetadata = false;
        IDataSet dataSet = new FlatXmlDataSet(new File(
                "./src/test/resources/mhadb-dataset.xml"),
                enableDTDMetadata,
                enableColumnSensing);
        try {
            DatabaseOperation.CLEAN_INSERT.execute(dbUnitCon, dataSet);
        } finally {
            DataSourceUtils.releaseConnection(con, dataSource);
        }
    }
}

但是每当我运行测试时,它都会在每个测试方法之前再次刷新数据库数据集,我认为这非常长而且非常不好。

如何仅在失败时重新加载/刷新?

PS:代码有多糟糕?

I am using DBUnit to test a Spring/Hibernate persistence.

I created an abstract test:

public abstract class AbstractTestCase extends
    AbstractTransactionalDataSourceSpringContextTests {

    @Override
    protected String[] getConfigLocations() {
        return new String[] { 
                "classpath:/applicationContext.xml",
                "classpath:/testDataSource.xml" };
    }
    @Override
    protected void onSetUpInTransaction() throws Exception {
        DataSource dataSource = jdbcTemplate.getDataSource();
        Connection con = DataSourceUtils.getConnection(dataSource);

        boolean validateSchemaExists = true;
        IDatabaseConnection dbUnitCon = new DatabaseConnection(con,
                "MHADB_TEST", validateSchemaExists);

        DatabaseConfig dbUnitConConfig = dbUnitCon.getConfig();
        dbUnitConConfig.setProperty(DatabaseConfig.PROPERTY_DATATYPE_FACTORY,
                new OracleDataTypeFactory());

        boolean enableColumnSensing = true;
        boolean enableDTDMetadata = false;
        IDataSet dataSet = new FlatXmlDataSet(new File(
                "./src/test/resources/mhadb-dataset.xml"),
                enableDTDMetadata,
                enableColumnSensing);
        try {
            DatabaseOperation.CLEAN_INSERT.execute(dbUnitCon, dataSet);
        } finally {
            DataSourceUtils.releaseConnection(con, dataSource);
        }
    }
}

But whenever I run a test, it refresh the DB agains the dataSet before EVERY test method, which is quite very long and very not nice I think.

How could I reload/refresh only on failure?

P.S.: How much does the code suck?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

山人契 2024-08-03 20:32:00

我找到了一种加快测试速度的方法,即使行为仍然不符合预期(失败时刷新):

    dbUnitConConfig.setFeature(DatabaseConfig.FEATURE_BATCHED_STATEMENTS,
            true);

I found a way to speed up the tests, even thought the behaviour is still not as expected (refresh on fail):

    dbUnitConConfig.setFeature(DatabaseConfig.FEATURE_BATCHED_STATEMENTS,
            true);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文