【问题标题】:DBUnit setup method not called?未调用 DBUnit 设置方法?
【发布时间】:2012-03-30 13:16:04
【问题描述】:

我正在使用 DBUnit 来测试用 Hibernate 和 Spring 实现的 DAO。我在 DBUnit 的设置代码中放置了一个断点,我看到相应的方法从未被调用。我需要按照 CLEAN_INSERT 方案初始化我的数据库,但从不调用 setup 方法(从 TestCase 覆盖)。

有什么想法吗?

编辑:我在 maven 依赖图中看到 DBunit 2.4.8(最新版本)依赖于 JUnit 3.8.2?! DBUnit 是否与较新版本的 JUnit (4.9) 兼容?

谢谢

【问题讨论】:

    标签: java unit-testing dbunit


    【解决方案1】:

    如果您使用的是 JUnit 4,则不应再从 TestCase 扩展。将示例中的代码放在http://www.dbunit.org/howto.html#noextend 中您自己的方法中。只要用@org.junit.Before注解即可。

    【讨论】:

    • 我没有准确地说我使用的是第一种方法,即从 DBTestCase 类扩展。在这种情况下,我不应该定义 setup 和 teardown 方法。
    • 我从未使用过DBTestCase,它基于JUnit 3 代码,并且要求您为JUnit 3 设置相关框架,而不是使用JUnit 4 处理这些事情的方式。相反,您可以编写自己的父类来处理数据库设置、拆卸并使用 CLEAN_INSERT 重新加载数据集。
    【解决方案2】:

    您当然可以将 DBUnit 与 JUnit 4.x 一起使用。我尝试使用 vanilla JDBC 构建一个示例,将 Spring 和 Hibernate 留给您。不过,我强烈建议您尝试this open source utility,让您的 Spring 和 DBUnit 体验更加愉快。请注意,我没有为该实用程序做出贡献,只是使用它。

    另一个 DBUnit 挑战是它不会为您创建表,因此内存数据库可能会给您带来问题,请查看 this other stackoverflow post 了解更多详细信息。

    我正在使用 DBUnit 2.4.8、HSQLDB 1.8.0.10 和 JUnit 4.10。

    import static org.junit.Assert.assertEquals;
    
    import java.io.StringReader;
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    
    import org.dbunit.IDatabaseTester;
    import org.dbunit.JdbcDatabaseTester;
    import org.dbunit.dataset.IDataSet;
    import org.dbunit.dataset.xml.FlatXmlDataSetBuilder;
    import org.dbunit.operation.DatabaseOperation;
    import org.junit.After;
    import org.junit.Before;
    import org.junit.Test;
    
    public class DBUnitTester {
    
      private IDatabaseTester databaseTester;
    
      @Before
      public void init() throws Exception {
        databaseTester = new JdbcDatabaseTester(org.hsqldb.jdbcDriver.class.getName(), "jdbc:hsqldb:sample", "sa", "");
    
        createTablesSinceDbUnitDoesNot(databaseTester.getConnection().getConnection());
    
        String inputXml = 
            "<dataset>" + 
            "    <TEST_TABLE COL0=\"row 0 col 0\" " + 
            "                COL1=\"row 0 col 1\"" + 
            "                COL2=\"row 0 col 2\"/> " + 
            "</dataset>";
        IDataSet dataSet = new FlatXmlDataSetBuilder().build(new StringReader(inputXml));
        databaseTester.setDataSet(dataSet);
        databaseTester.setSetUpOperation(DatabaseOperation.CLEAN_INSERT);
        databaseTester.setTearDownOperation(DatabaseOperation.DELETE_ALL);
        databaseTester.onSetup();
      }
    
      private void createTablesSinceDbUnitDoesNot(Connection connection) throws SQLException {
        PreparedStatement statement = connection.prepareStatement("CREATE TABLE TEST_TABLE(COL0 VARCHAR(20), COL1 VARCHAR(20), COL2 VARCHAR(20))");
        statement.execute();
        statement.close();
    
      }
    
      @Test
      public void firstTest() throws SQLException, Exception {
        PreparedStatement statement = databaseTester.getConnection().getConnection().prepareStatement("SELECT COL0 FROM TEST_TABLE");
        ResultSet rs = statement.executeQuery();
        rs.next();
        assertEquals("row 0 col 0", rs.getString("COL0"));
      }
    
    
      @After
      public void cleanUp() throws Exception {
        databaseTester.onTearDown();
      }
    }
    

    【讨论】:

      猜你喜欢
      • 2020-12-25
      • 1970-01-01
      • 2012-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-15
      • 1970-01-01
      相关资源
      最近更新 更多