2012-03-30 22 views
2

私はHibernateとSpringで実装されたDAOをテストするためにDBUnitを使用しています。私はDBUnitのセットアップコードにブレークポイントを置くと、対応するメソッドが呼び出されないことがわかります。 CLEAN_INSERTスキームに従ってデータベースを初期化する必要がありますが、(TestCaseからオーバーライドされた)セットアップメソッドは呼び出されません。DBUnitセットアップメソッドが呼び出されていませんか?

EDIT:DBUNIT 2.4.8(前回のバージョン)はJUnit 3.8.2に依存しています。 DBUnitは新しいバージョンのJUnit(4.9)と互換性がありますか?

おかげ

答えて

3

あなたはJUnitの4を使用している場合は、あなたはそれ以上のテストケースから延びるべきではありません。例のコードを独自の方法でhttp://www.dbunit.org/howto.html#noextendに入れてください。 @org.junit.Beforeで注釈を付ける限り、何でも好きなものを呼び出すことができます。

+0

DBTestCaseクラスから拡張した最初のメソッドを使用しているとは正確ではありませんでした。この場合、私はセットアップとティアダウンの方法を定義するつもりはありません。 –

+0

私はJUnit 3コードに基づいた 'DBTestCase'を使用したことがなく、JUnit 4がこれらの処理方法を使用するのではなく、JUnit 3の関連フレームワークを設定する必要があります。代わりに、データベースのセットアップ、ティアダウンを処理する独自の親クラスを作成し、CLEAN_INSERTを使用してデータセットをリロードすることができます。 –

0

あなたは確かにJUnit 4.xでDBUnitを使用できます。私はあなたにSpringとHibernateを残してバニラJDBCを使って例を挙げようとしました。しかし、私は、あなたのSpringとDBUnitのエクスペリエンスをはるかに楽しくするために、this open source utilityを提供することを強くお勧めします。注:私はそのユーティリティに貢献していない、ちょうどそれを使用しています。

DBUnitのもう1つの課題は、テーブルを作成しないため、メモリ内のデータベースで問題が発生する可能性があるということです。詳細は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(); 
    } 
} 
関連する問題