DbUnitAdvertisementDbUnitとは
DbUnitは、システムとデータベース(永続化層)の関連テストを行うテスティングフレームワークである。
仮想的なMockオブジェクトを利用するのではなく、実際にデータベースを利用した自動再帰テストを行うことができる。 JUnitを拡張して作成されている。 入手〜設定
http://dbunit.sourceforge.net/からアーカイブを入手する。
入手したzipファイルを解凍後、jarファイルにクラスパスを通す。 JUnitと組み合わせて動作するように設計されています。 使用するテーブル
テストデータの用意
ここではXMLを利用してテストデータを定義する。
DbUnitSampleTestData.xml
<?xml version='1.0' encoding='UTF-8'?>
<dataset>
<user id="1" name="tarou" age="10" createdate="2005-01-01 00:00:00" />
<user id="2" name="jirou" age="20" createdate="2005-01-01 00:00:00" />
<user id="3" name="saburou" age="30" createdate="2005-01-01 00:00:00" />
<user id="4" name="mametarou" age="40" createdate="2005-01-01 00:00:00" />
</dataset>
ソースコードの記述
テストを書く前に枠組みを記述。
DbUnitSampleTest.java
import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.ResourceBundle;
import org.dbunit.DatabaseTestCase;
import org.dbunit.database.DatabaseConnection;
import org.dbunit.database.IDatabaseConnection;
import org.dbunit.dataset.IDataSet;
import org.dbunit.dataset.xml.FlatXmlDataSet;
public class DbUnitSampleTest extends DatabaseTestCase{
public void setUp() throws Exception{
super.setUp();
}
public void tearDown() throws Exception{
super.tearDown();
}
protected IDatabaseConnection getConnection() throws Exception {
ResourceBundle bundle = ResourceBundle.getBundle("application");
Class.forName(bundle.getString("db.driver"));
Connection con = DriverManager.getConnection(bundle.getString("db.url"),
bundle.getString("db.user"),
bundle.getString("db.pass"));
return new DatabaseConnection(con);
}
protected IDataSet getDataSet() throws Exception {
return new FlatXmlDataSet(new FileInputStream("config/DbUnitSampleTestData.xml"));
}
public void testXXX() throws Exception{
// 未実装
}
}
setUp()メソッドテストの初期化処理を記述。 tearDown()メソッド テストの後始末を記述。 getConnection()メソッド データベース接続用のIDatabaseConnectionインタフェースを実装したクラスを作成する処理を記述する。 DbUnitがこのメソッドを使用してデータベースへ接続するために使用する。 getDataSet()メソッド テスト用データが格納されているIDataSetインスタンスを作成するコードを記述する。 DbUnitがこのメソッドを使用してテスト実行前のデータベースに対するデータ格納処理を行う。 データベース接続用情報 jdbc.properties db.driver=com.mysql.jdbc.Driver db.url=jdbc:mysql://localhost:3306/sample db.user=admin db.pass=admin このテストを実行すると、データベースにデータが格納される。 テストコードの記述
DbUnitSampleTest.java
import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ResourceBundle;
import org.dbunit.DatabaseTestCase;
import org.dbunit.database.DatabaseConnection;
import org.dbunit.database.IDatabaseConnection;
import org.dbunit.dataset.IDataSet;
import org.dbunit.dataset.xml.FlatXmlDataSet;
public class DbUnitSampleTest extends DatabaseTestCase{
public void setUp() throws Exception{
super.setUp();
}
public void tearDown() throws Exception{
super.tearDown();
}
protected IDatabaseConnection getConnection() throws Exception {
ResourceBundle bundle = ResourceBundle.getBundle("application");
Class.forName(bundle.getString("db.driver"));
Connection con = DriverManager.getConnection(bundle.getString("db.url"),
bundle.getString("db.user"),
bundle.getString("db.pass"));
return new DatabaseConnection(con);
}
protected IDataSet getDataSet() throws Exception {
return new FlatXmlDataSet(new FileInputStream("config/DbUnitSampleTestData.xml"));
}
public void testXXX() throws Exception{
Connection con = null;
try{
// 接続
con = getConnection().getConnection();
// 問合せ実行
PreparedStatement stmt = con.prepareStatement("select id, name, age, createdate from user");
ResultSet result = stmt.executeQuery();
// 行数確認
result.last();
assertEquals(result.getRow(), 4);
// 内容確認
result.first();
assertEquals(result.getString(1), "1");
assertEquals(result.getString(2), "tarou");
assertEquals(result.getString(3), "10");
assertEquals(result.getString(4), "2005-01-01 00:00:00.0");
}finally{
con.close();
}
}
}
上記の例ではtestXXXメソッドが実際のテスト用メソッド。テスト用コードはプレフィックスにtestを付加したメソッド名にする(例:testConnection, testSelect)
Microsoft Excelファイルでテストデータを記述する
DbUnitでは、Excelのファイルを利用してテストデータを定義することもできる。作成の際には、以下の条件にしたがってファイルを作成すればよい。
ワークシート名:テーブル名 1行目:ヘッダ。テーブルのカラム名 2行目以降:データを記述。 ![]() 図1:テストデータサンプルイメージ テストコードでは、getDataSet()メソッドを以下のように記述すればよい。
protected IDataSet getDataSet() throws Exception {
return new XlsDataSet(new FileInputStream("config/DbUnitSampleTestData.xls"));
}
リンクAdvertisement |
ショートカット・634トップページ・このカテゴリのトップページに戻る ・634ラボ サイト検索Y!ログール |