============================================= ThunderGateを利用したアプリケーションのテスト ============================================= この文書では、ThunderGateを利用したアプリケーションのテストについて紹介します。 ThunderGateを利用したアプリケーションについては :doc:`with-dsl` を、 テストドライバーの一般的な利用方法については :doc:`../testing/user-guide` をそれぞれ参照してください。 テストの流れ ============ 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が離れている場合に、 開発環境からネットワークを通してデータベースを参照するなどでしょう。