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 に配置されています。

それとは別に、以下に同じ内容のファイルを以下に配置した場合、 テストドライバーはそれらを優先して使用します。

  1. クラスパスの <ターゲット名>-jdbc.properties
  2. クラスパスの asakusa-test.properties

上記のファイルが有効になるのは、テストドライバーに特有な以下の操作のみです。

  • あらゆる処理の前に利用するテーブルをTRUNCATEする
  • インポートの前にテーブルにデータを流し込む
  • エクスポート後にテーブルのデータを取り出す

ThunderGateの本来の動作であるインポート処理やエクスポート処理については、 上記の設定を利用せずにThunderGate本来の設定を利用します。 そのため、上記の設定とThunderGateの設定が乖離している場合、 正しく動作しない場合があります。

Warning

上記の設定は、ThunderGateが利用するデータベースに直接 テストドライバーからアクセスするためのものです。 ThunderGateを利用するジョブフローをテストする場合、 テストの実行中にThunderGateを直接起動します。 このとき、ThunderGateは上記の設定 ではなく ThunderGateの 設定を優先して利用します。

Note

テスト用に特別な設定を行うケースはほとんどありません。 通常は開発環境のThunderGateの設定を利用するようにしてください。

テスト用に特別な設定をするケースは、 おそらく開発環境とThunderGateが離れている場合に、 開発環境からネットワークを通してデータベースを参照するなどでしょう。