Метод установки DBUnit не вызывается? - PullRequest
2 голосов
/ 30 марта 2012

Я использую DBUnit для тестирования DAO, реализованных с помощью Hibernate и Spring.Я установил точку останова в установочном коде DBUnit и вижу, что соответствующие методы никогда не вызываются.Мне нужно инициализировать мою базу данных, следуя схеме CLEAN_INSERT, но метод установки (переопределенный из TestCase) никогда не вызывается.

Есть идеи?

EDIT : я видел вграф зависимостей maven, что DBunit 2.4.8 (последняя версия) зависит от JUnit 3.8.2 ?!Совместим ли DBUnit с более новыми версиями JUnit (4.9)?

Спасибо

Ответы [ 2 ]

3 голосов
/ 30 марта 2012

Если вы используете JUnit 4, вам больше не нужно расширяться от TestCase. Поместите код из примера в http://www.dbunit.org/howto.html#noextend в свой собственный метод. Вы можете называть это как хотите, если вы пометите это @org.junit.Before.

0 голосов
/ 30 марта 2012

Конечно, вы можете использовать DBUnit с JUnit 4.x.Я попытался привести пример с использованием ванильного JDBC, оставив вам Spring и Hibernate.Хотя я настоятельно рекомендую этой утилите с открытым исходным кодом попробовать сделать ваш опыт работы с Spring и DBUnit гораздо более приятным.Обратите внимание, я не участвовал в этой утилите, просто использовал ее.

Еще одна проблема DBUnit заключается в том, что она не создает таблицы для вас, поэтому база данных в памяти может дать вам проблемы, взгляните на это другое сообщение от stackoverflow для более подробной информации.

Я использую 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();
  }
}
...