あなたは確かに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();
}
}
DBTestCaseクラスから拡張した最初のメソッドを使用しているとは正確ではありませんでした。この場合、私はセットアップとティアダウンの方法を定義するつもりはありません。 –
私はJUnit 3コードに基づいた 'DBTestCase'を使用したことがなく、JUnit 4がこれらの処理方法を使用するのではなく、JUnit 3の関連フレームワークを設定する必要があります。代わりに、データベースのセットアップ、ティアダウンを処理する独自の親クラスを作成し、CLEAN_INSERTを使用してデータセットをリロードすることができます。 –