ThunderGateを利用したアプリケーションのテスト¶
この文書では、ThunderGateを利用したアプリケーションのテストについて紹介します。 ThunderGateを利用したアプリケーションについては Asakusa DSLとThunderGateの連携 を、 テストドライバーの一般的な利用方法については テストドライバーユーザーガイド をそれぞれ参照してください。
テストの流れ¶
ThunderGateを利用するジョブフローやバッチのテストを行う場合、 テストドライバーは関連するデータベース上のテーブルをテスト用に操作します。 ジョブフローやバッチの初期データ投入や結果の検証を行う際に、 対応する入出力がThunderGateのものであれば、 テストドライバーは自動的に一連の操作を行います。
これは次の流れで行います。
- テーブルの初期化
テスト対象が利用する入出力全てのテーブルを
TRUNCATE TABLE <テーブル名>
のコマンドで初期化します。初期化されるテーブルは、テストで利用するすべてのテーブルです。 現在のところ、これを抑制する方法はありません。
この処理はジョブの実行前にまとめて行われます。
- 初期データの投入
テスト対象が利用する入出力のテーブルに指定したデータセットを、
INSERT INTO <テーブル名> ...
のコマンドでそれぞれに挿入します。利用するデータセットはテストドライバーの
prepare(URI)
メソッドで指定します。 同メソッドの指定がない場合、テーブルには何も挿入しません。この処理はそれぞれのジョブフローの処理開始前に行われます。 そのため、バッチの途中にあるジョブフローを実行する際に そこまでのジョブフローで出力した結果がテーブルに含まれている場合もあります。
- 結果の取得
テスト対象の実行結果が格納されたテーブルを検証のために、
SELECT ... FROM <テーブル名>
のコマンドでそれぞれのテーブルの全内容を取得します。結果の取得が行われるテーブルは、テストドライバーの
verify(...)
メソッドが指定されたもののみです。 同メソッドの指定がない場合、結果の取得は行いません。この処理はそれぞれのジョブフローの処理終了後に行われます。 つまり、バッチの途中であってもジョブフローが完了するたびに結果の比較が行われ、 テストが中断される場合があります。
なお、ジョブフローの入出力には実際のThunderGateによる処理が行われます。 テストドライバーが担当するのは上記の3つの処理のみです。
接続先データベースの設定¶
ThunderGateが利用するデータベースに対してテストドライバーが接続する際、
テストドライバーは現在の環境からThunderGateの設定を利用します。
このとき利用する設定はJDBCのコネクションに関するもので、
$ASAKUSA_HOME/bulkloader/conf/<ターゲット名>-jdbc.properties
に配置されています。
それとは別に、以下に同じ内容のファイルを以下に配置した場合、 テストドライバーはそれらを優先して使用します。
- クラスパスの
<ターゲット名>-jdbc.properties
- クラスパスの
asakusa-test.properties
上記のファイルが有効になるのは、テストドライバーに特有な以下の操作のみです。
- あらゆる処理の前に利用するテーブルをTRUNCATEする
- インポートの前にテーブルにデータを流し込む
- エクスポート後にテーブルのデータを取り出す
ThunderGateの本来の動作であるインポート処理やエクスポート処理については、 上記の設定を利用せずにThunderGate本来の設定を利用します。 そのため、上記の設定とThunderGateの設定が乖離している場合、 正しく動作しない場合があります。
Warning
上記の設定は、ThunderGateが利用するデータベースに直接 テストドライバーからアクセスするためのものです。 ThunderGateを利用するジョブフローをテストする場合、 テストの実行中にThunderGateを直接起動します。 このとき、ThunderGateは上記の設定 ではなく ThunderGateの 設定を優先して利用します。
Note
テスト用に特別な設定を行うケースはほとんどありません。 通常は開発環境のThunderGateの設定を利用するようにしてください。
テスト用に特別な設定をするケースは、 おそらく開発環境とThunderGateが離れている場合に、 開発環境からネットワークを通してデータベースを参照するなどでしょう。