3.1.8. リクエスト単体テストの実施方法

3.1.8.1. 前提条件

RESTfulウェブサービス実行基盤向けのテストでは、他の実行基盤向けテスティングフレームワークに加え 依存するモジュールを追加する必要がある。 詳細は 自動テストフレームワークの使用方法 参照。

3.1.8.2. テストクラスの書き方

import nablarch.fw.web.HttpResponse;
import nablarch.fw.web.RestMockHttpRequest;
import nablarch.test.core.http.RestTestSupport;
import org.json.JSONException;
import org.junit.Test;
import org.skyscreamer.jsonassert.JSONAssert;
import org.skyscreamer.jsonassert.JSONCompareMode;

import static com.jayway.jsonpath.matchers.JsonPathMatchers.hasJsonPath;
import static org.hamcrest.Matchers.hasSize;
import static org.junit.Assert.assertThat;

public class SampleTest extends RestTestSupport { //RestTestSupportを継承する
    @Test  //アノテーションを付与する
    public void プロジェクト一覧が取得できること() throws JSONException {
        String message = "プロジェクト一覧取得";

        RestMockHttpRequest request = get("/projects");               //リクエストを生成する
        HttpResponse response = sendRequest(request);                 //リクエストを送信する
        assertStatusCode(message, HttpResponse.Status.OK, response);  //結果を確認する

        assertThat(response.getBodyString(), hasJsonPath("$", hasSize(10)));    //json-path-assertを使ったレスポンスボディの検証

        JSONAssert.assertEquals(message, readTextResource("プロジェクト一覧が取得できること.json")
                , response.getBodyString(), JSONCompareMode.LENIENT);                  //JSONAssertを使ったレスポンスボディの検証
    }
}

3.1.8.2.1. フレームワークで用意されたテストクラスのスーパークラスを継承する

テストクラスのスーパークラスとして nablarch.test.core.http.RestTestSupport クラスを継承する。 テストデータの投入とデータベースのアサートが不要な場合は nablarch.test.core.http.SimpleRestTestSupport クラスを継承する。 その場合は以下の テストデータの書き方 は読み飛ばして良い。

それぞれのスーパークラスの詳細は 自動テストフレームワークの使用方法 参照。

3.1.8.2.2. JUnit4のアノテーションを使用する

テスティングフレームワークはJUnit4をベースとしているため、テスト対象メソッドに @Test アノテーションを付与する。

3.1.8.2.3. 事前準備補助機能を使ってリクエストを生成する

スーパークラスに用意された 事前準備補助機能 を使ってリクエストを生成する。

3.1.8.2.4. リクエストを送信する

スーパークラスに用意された リクエスト送信メソッド を呼び出すことでリクエストを送信する。

3.1.8.2.5. 結果を確認する

ステータスコードは、スーパークラスに用意された メソッド を呼び出すことで検証する。 レスポンスボディについては任意のライブラリを使用してアプリケーションに合わせた検証を行う。

3.1.8.3. テストデータの書き方

Excelによるテストデータ記述 に記載された方法で、テストデータを記述することができる。 ただし、RESTfulウェブサービス実行基盤向けのテストで自動的に読み込まれるデータは以下のみとなる。

  • テストクラスで共通のデータベース初期値
  • テストメソッド毎のデータベース初期値

重要

RESTfulウェブサービス実行基盤以外のテストの場合テストクラス一つにつきExcelファイルが必ず一つ必要であったが、 RESTfulウェブサービス実行基盤向けのテストではExcelファイルが存在しない場合でも、エラーとはならず単にデータベースへの データ投入がスキップされるだけとなっている。

重要

上記以外のテストデータをExcelファイルに記載することは可能だが、記載した場合は Excelファイルから、入力パラメータや戻り値に対する期待値などを取得したい に記載の方法で、テストクラスに値を取得する処理を記述する必要がある。 テストクラスの記述量を減らすためにスーパークラス RestTestSupport では以下のメソッドを 提供する。

List<Map<String, String>> getListMap(String sheetName, String id)
List<Map<String, String[]>> getListParamMap(String sheetName, String id)
Map<String, String[]> getParamMap(String sheetName, String id)

3.1.8.3.1. テストクラスで共通のデータベース初期値

テストクラスで共通のデータベース初期値 参照。

3.1.8.3.2. テストメソッド毎のデータベース初期値

テストデータを記載したExcelファイルにテストメソッドの名前でシートを用意し、 SETUP_TABLESのデータタイプでデータベース初期値を記載する。 ここに記載されたデータは、フレームワークによりテストメソッド実行時に投入される。