35.3.3. モックデータを利用した統合テスト
各テストの前にデータベースにデータを挿入または消去する必要がある場合は、Seam 統合を DBUnit で使用することができます。 これを行うには
SeamTest ではなく DBUnitSeamTest を拡張します。
DBUnit 用のデータセットを与える必要があります。
DBUnit は flat と XML の 2 種類のデータセットファイル形式に対応します。 Seam の DBUnitSeamTest は flat 形式が使用されるものとみなしますので、使用するデータセットもこの形式であることを確認してください。
テストクラス内で
prepareDBUnitOperations() を無効にしてデータセットを以下のように設定します。
コンストラクタ引数として他にオペレーションが指定されていない場合は、
DataSetOperation は DatabaseOperation.CLEAN_INSERT をデフォルトで設定します。 前述の例では BaseData.xml に定義された全テーブルを消去し、 BaseData.xml に宣言されているすべての行を挿入してから各 @Testメソッドが呼び出されます。
テストメソッドの実行後さらにデータ消去が必要な場合は
afterTestOperations の一覧にオペレーションを追加します。
TestNG のテストパラメータ
datasourceJndiName を設定してデータソースに関する情報を DBUnit に伝える必要があります。
<parameter name="datasourceJndiName" value="java:/seamdiscsDatasource"/>
<parameter name="datasourceJndiName" value="java:/seamdiscsDatasource"/>
DBUnitSeamTest は MySQL および HSQL のいずれにも対応します。 使用するデータベースを伝える必要があります。 これをしないとデフォルトでは HSQL に設定されます。
<parameter name="database" value="MYSQL" />
<parameter name="database" value="MYSQL" />
また、 バイナリデータをテストデータセットに挿入することもできます (これは Window では未検証 ですので注意してください)。クラスパス上にあるリソースの場所を DBUnitSeamTest に伝えます。
<parameter name="binaryDir" value="images/" />
<parameter name="binaryDir" value="images/" />
HSQL を使用するためバイナリのインポートがない場合は、これらのパラメータはいずれも設定する必要はありません。 ただし、 テスト設定で
datasourceJndiName を指定しない限り、 テスト実行の前に setDatabaseJndiName() を呼び出す必要があります。HSQL、MySQL のいずれも使用していない場合は、いくつかのメソッドを無効にする必要があります。詳細は DBUnitSeamTest の Javadoc を参照してください。