没有调用DBUnit安装方法?

时间:2012-03-30 13:16:04

标签: java unit-testing dbunit

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

有什么想法吗?

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

由于

2 个答案:

答案 0 :(得分:3)

如果您正在使用JUnit 4,则不应再从TestCase扩展。将http://www.dbunit.org/howto.html#noextend中的示例代码放在您自己的方法中。只要您使用@org.junit.Before对其进行注释,就可以将其称为任何所需内容。

答案 1 :(得分:0)

您当然可以将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();
  }
}