21. バッチのテスト

このチュートリアルでは、バッチのテストを作成する方法を説明していきます。

21.1. バッチのテスト

バッチのテストも基本的に フロー部品のテストジョブフローのテスト で説明した方法と同様にテストドライバーを利用してテストを作成していきますが、 一部テストドライバーで利用するAPIが異なるので、ここではその違いを中心に説明します。

21.2. バッチのテストメソッドを作成する

以下は、バッチのテストをテストドライバーで実行するテストメソッドの例です。

SummarizeBatchTest.java
...
import com.asakusafw.testdriver.BatchTester;
...

private void run(String dataSet) {
    BatchTester tester = new BatchTester(getClass());
    tester.setBatchArg("date", "testing");

    tester.jobflow("byCategory").input("storeInfo", StoreInfo.class)
        .prepare("masters.xls#store_info");
    tester.jobflow("byCategory").input("itemInfo", ItemInfo.class)
        .prepare("masters.xls#item_info");

    tester.jobflow("byCategory").input("salesDetail", SalesDetail.class)
        .prepare(dataSet + "#sales_detail");
    tester.jobflow("byCategory").output("categorySummary", CategorySummary.class)
        .verify(dataSet + "#result", dataSet + "#result_rule");
    tester.jobflow("byCategory").output("errorRecord", ErrorRecord.class)
        .dumpActual("build/dump/error_" + dataSet);

    tester.runTest(SummarizeBatch.class);
}

バッチをテストするには、テストドライバー用のAPIクラス BatchTester [1] をインスタンス化します。

利用方法は フロー部品のテストジョブフローのテスト とほぼ同様ですが、以下の点が異なります。

  • 入出力を指定する前に、どのジョブフローに対するテストデータなのかを指定する
    • jobflow メソッドを経由して入出力を利用するジョブフローのID(注釈 @JobFlowname に指定した文字列)を指定する
  • runTest メソッドにはバッチクラス( .class )を指定する
    • InOut の指定は不要のため、各 inputoutput で戻り値を保持する必要はない。
[1]com.asakusafw.testdriver.BatchTester