アプリケーションテストスタートガイド

この文書では、Asakusa Frameworkを使った作成したバッチアプリケーションをテストする方法について簡単に紹介します。

See also

テストのより詳しい情報は テストドライバーユーザーガイド を参照して下さい。

演算子のテスト

Operator DSLを使って記述した演算子に対するテストの方法は、以下の2種類の方法が提供されています。

  • 演算子クラスに対するテスト
  • 一時的なフロー記述に対するテスト

演算子クラスに対するテスト

この方法は、演算子のテストを一般的なクラスに対する単体テストと同様の方法で作成します。

このテストでは、演算子クラスに記述した演算子メソッドにテストデータとして用意したデータモデルオブジェクトを渡して実行し、変更されたデータモデルオブジェクトの内容やメソッドの戻り値をJUnitのAPIなどを使って検証します。

演算子クラスは抽象クラスとして宣言しているため、テストメソッド内では演算子実装クラス(演算子クラス名の末尾に Impl を付与したクラスで、Operator DSLコンパイラが自動的に生成する)のインスタンスから演算子メソッドを呼び出します。

詳しくは、以下を参照してください。

一時的なフロー記述に対するテスト

この方法は、演算子のテストを データフローのテスト と同様の方法で作成します。

このテストでは、テストドライバーを使って「一時的なフロー記述」(テスト専用のデータフロー)を作成し、そのデータフローにテスト対象の演算子を含めて実行するテストケースを記述します。テストデータのセットアップや実行結果の検証はテストドライバーの機能を利用します。

この方法は 演算子クラスに対するテスト と比べ、以下のようなメリットがあります。

  • 複数の演算子を組み合わせたテストケースの作成が可能
  • 複雑なテストデータ(入力データ、期待データ、テスト条件)を定義する様々な機能を利用可能
  • 演算子とデータフローのテストを統一的な方法で記述することが可能

詳しくは、以下を参照してください。

データフローのテスト

Flow DSLを使って記述したデータフロー、およびBatch DSLを使って記述したバッチに対するテストでは、DSLのコンパイラや実行環境と連携してテストを実行します。

テストドライバー

Asakusa Frameworkにはテストドライバーというテスト開発用のJavaライブラリが含まれています。 これには次のような特徴があります。

  • テスト用の実行エンジンや外部システム連携モジュールと自動的に連携したテストが可能
  • 様々な形式でテストデータ(入力データ、期待データ、検証ルール)を作成する機能を提供
  • JUnitなどの様々なテストハーネスから利用可能

また、 アプリケーションの実装 - Asakusa Data Model の機能と連携してテストケースの入出力データや検査ルールのテンプレートを生成するツールも提供しています。

テストドライバーはテスト対象の要素に対して、次の一連の処理を行います。

  1. 入力データを初期化する
  2. 入力データを流し込む
  3. 対象のプログラムをテスト用の実行エンジン向けにDSLコンパイルする
  4. 対象のプログラムを実行する
  5. 出力結果を取り込む
  6. 出力結果と期待データを検証する

詳しくは、以下を参照してください。

テストデータの作成

テストドライバーでのテストを行うには、次の3種類の情報を用意します。 これらをまとめて「テストデータ」と呼ぶことにします。

入力データ
それぞれのデータフローの入力に指定するデータセット。 データモデルオブジェクトのリストと同じ構造。
期待データ
それぞれのデータフローからの出力に期待するデータセット。 入力データと同じ構造。
テスト条件
それぞれの出力と期待データを比較して間違いを見つける方法。

テストドライバーはテストデータをさまざまな形式で記述できます。 テストドライバーがサポートしているテストデータの形式には以下のようなものがあります。

  • Excelファイル形式
  • JSONファイル形式
  • Direct I/Oファイル形式 ( CSV, TSVファイルなど )
  • Javaクラス(オブジェクト)

詳しくは、以下を参照してください。

テストのデバッグと実行結果の分析

テストドライバーではテストのデバッグや実行結果の分析を支援する、以下のような機能を提供しています。

  • データフローの出力結果を保存する
  • テスト実行の比較結果を保存する
  • 演算子のトレースログを出力する

また、テストクラス自体はJUnitをはじめとした任意のテストハーネスを利用できるため、Javaの既存プロダクトと連携した継続的インテグレーション(Continuous Integration)環境を構築し、これらのレポート機能と連携することなども可能です。

詳しくは、以下を参照してください。