3.2.6. リクエスト単体テスト(メッセージ受信処理)

3.2.6.1. 概要

リクエスト単体テスト(メッセージ受信処理)では、 要求電文1件を受信したときの動作を擬似的に再現し、テストを行う。

3.2.6.1.1. 全体像

../../../../../_images/real_request_test_class.png

3.2.6.2. 主なクラス, リソース

名称 役割 作成単位
リクエスト単体テストクラス テストロジックを実装する。 テスト対象クラス(Action)につき1つ作成
Excelファイル(テストデータ) テーブルに格納する準備データや期待する結果、入力ファイルなど、テストデータを記載する。 テストクラスにつき1つ作成
StandaloneTestSupportTemplate バッチやメッセージング処理などコンテナ外で動作する処理のテスト実行環境を提供する。
MessagingRequestTestSupport 同期応答メッセージ受信処理のリクエスト単体テストで必要となるテスト準備機能、各種アサートを提供する。
MessagingReceiveTestSupport 応答不要メッセージ受信処理のリクエスト単体テストで必要となるテスト準備機能、各種アサートを提供する。
TestShot データシートに定義されたテストケース1件分の情報を格納するクラス。
MainForRequestTesting テスト用メインクラス。テスト実行時の差分を吸収する。
DbAccessTestSupport DB準備データ投入などデータベースを使用するテストに必要な機能を提供する。
MQSupport 電文作成などメッセージングのテストに必要な機能を提供する。
TestDataConvertor Excelから読み込んだテストデータを編集するためのインタフェース。 必要に応じてデータ種別ごとにアーキテクトが実装する。

3.2.6.3. 構造

3.2.6.3.1. StandaloneTestSupportTemplate

バッチやメッセージング処理などコンテナ外で動作する処理のテスト実行環境を提供する。 テストデータを読み取り、全テストショット(TestShot )を実行する。

3.2.6.3.2. TestShot

1テストショットの情報保持とテストショット実行を行う。テストショットは以下の要素で成り立っている。

  • 入力データの準備
  • メインクラス起動
  • 出力結果の確認

バッチやメッセージング処理などコンテナ外で動作する処理のテストにおいて 共通の準備処理、結果確認機能を提供する。

準備処理 結果確認
データベースのセットアップ データベース更新内容確認
ログ出力結果確認
ステータスコード確認

入力データ準備や結果確認ロジックはバッチや各種メッセージング処理ごとに異なるので方式に応じたカスタマイズが可能となっている。

3.2.6.3.3. MessagingRequestTestSupport

同期応答メッセージ受信処理テスト用のスーパクラス。アプリケーションプログラマは本クラスを継承してテストクラスを作成する。

本クラスは、TestShot が提供する準備処理、結果確認に以下の機能を追加する。

準備処理 結果確認
要求電文の作成 応答電文の内容確認

本クラスを使用することで、リクエスト単体テストのテストソース、テストデータを定型化でき、テストソース記述量を大きく削減できる。

具体的な使用方法は、リクエスト単体テストの実施方法(同期応答メッセージ受信処理)を参照。

補足

本クラスは、入力データをキューにPUTする用途で、main側のコンポーネント設定ファイルを読み込む。 その際、nablarch.fw.messaging.FwHeaderDefinition実装クラスは、 fwHeaderDefinitionという名前で登録されていなければならない。 これ以外の名称を使用する場合は、本クラスのgetFwHeaderDefinitionName()をオーバライドすることにより 本クラスが使用するFwHeaderDefinitionコンポーネント名を変更することができる。

3.2.6.3.4. MessagingReceiveTestSupport

応答不要メッセージ処理テスト用のスーパクラス。アプリケーションプログラマは本クラスを継承してテストクラスを作成する。

本クラスは、TestShot が提供する準備処理、結果確認に以下の機能を追加する。

準備処理
要求電文の作成

本クラスを使用することで、リクエスト単体テストのテストソース、テストデータを定型化でき、テストソース記述量を大きく削減できる。

具体的な使用方法は、リクエスト単体テストの実施方法(応答不要メッセージ受信処理)を参照。

3.2.6.3.5. MainForRequestTesting

リクエスト単体テスト用のメインクラス。本番用メインクラスとの主な差異は以下の通り。

  • テスト用のコンポーネント設定ファイルからシステムリポジトリを初期化する。
  • 常駐化機能を無効化する。

3.2.6.3.6. MQSupport

メッセージに関する操作を提供するクラス。 主に以下の機能を提供する。

  • テストデータから要求電文を作成し、受信キューにPUTする。
  • 応答電文を送信キューからGETし、テストデータの期待値と内容を比較する。

3.2.6.3.7. TestDataConvertor

Excelから読み込んだテストデータを編集するためのインタフェース。 必要に応じてXMLやJSONなどのデータ種別ごとにアーキテクトが実装する。

実装クラスでは以下の機能を実装する。

  • Excelから読み込んだデータに対し任意の編集を行う。
  • 編集を行ったデータを読み込むためのレイアウト定義データを動的に生成する。

本インタフェースを実装することで、例えばExcelに日本語で記述されたデータをURLエンコーディングする等の処理を追加することが可能である。

実装クラスは “TestDataConverter_<データ種別>” というキー名でテスト用のコンポーネント設定ファイルに登録する必要がある。

3.2.6.4. テストデータ

メッセージング処理固有のテストデータについて説明する。

3.2.6.4.1. メッセージ

基本的な記述方法は、リクエスト単体テストの実施方法(同期応答メッセージ受信処理) を参照。

補足

パディングおよびバイナリデータの扱いは、固定長ファイルと同様である。