こんにちは。株式会社VALGOエンジニアのヌマです。
地元秋田からリモートで全国各地のお仕事をしています。
今回はMulesoftのMunitに関して紹介します。
Munitとは?
Munitとは、Mulesoftで作成したフローの試験を行うフローのことを指します。
Anypoint Studio上で API の自動テストを簡単に構築できます。
Munit概要:https://docs.mulesoft.com/jp/munit/latest
Munitのフローは以下のように作られます。

- Execution
- テストを行うフローを実行する前にフローに渡すpayloadやattributeの設定などをします
- Behavior
- テストロジックを実行する前にすべての前提条件を設定します
- Validation
- Executionの結果に関連するすべての検証を行います
Munitで利用する主なコンポーネント
Munitを実際に作成する工程と主に紹介します。
今回利用するコンポーネントは以下になります。
- Event
- payloadやクエリパラメータなどattributesを設定
- Spy
- 指定したコンポーネントの前後で何が起きているかを監視
- Assert equals
- payloadやVariablesを検証
具体的な例で各コンポーネントを紹介していければと思います。

上記のようなフローを用意しました。
- Listenerでリクエストを受け付けます
- Transform Messageでマッピングを行います
- Requestコンポーネントを配置し、別システムにリクエストすることを仮定します
- Responseのpayloadをマッピングします
- On Error Propagateはエラーが起こった際の処理に利用します
正常系のMunit

正常系の範囲はListenerの後のところになります。
確認する内容としては、下記になります。
- Set Request Payload(Transform Message)のマッピングが想定通りできているか
- Set Response Payload(Transform Message)のマッピングが想定通りできているか
ここでは、Event、Spy、Mock Whenコンポーネントを利用します。

完成形は上記のようなフローです。1つ1つ説明していきましょう。
Execution
イメージ以下のようになります。

Set Eventでは、このフローが受け取るpayloadやクエリパラメータなどattributesの設定をします。Flow Referenceではテストしたいフローを呼ぶことになります。
attributesの書き方は特殊なので例示します。
{
headers : {
"apikey": "value1"
},
queryParams : {
"queryParam": "value2"
},
uriParams: {
"id" :"12345"
},
method: "GET"
}
Behavior
Spyとmock whenは下図のように対応します。

Spyコンポーネントでは、指定したコンポーネントの前後で何が起きているかを監視します。今回はSet Request Payloadの後でAssert equalsを置き、マッピング後のpayloadを検証します。
Mock whenはRequestコンポーネントをモックし、正常系の時に返ってくるレスポンスを定義します。
Validation

Validationでは、レスポンスで返ってくるpayloadを検証します。
異常系のMunit

今回はRequestコンポーネントで500エラーが返ってくるケースを作成します。
確認する内容としては、下記になります。
- Requestコンポーネントでエラーが発生した際にOn Error Propagateで処理されているか
- Set Valiableでセットした値になっているか
- Set Payloadでセットした値になっているか

完成形は上図のようなフローです。
Set Request Payload(Transform Message)のマッピングに関しては正常系で検証を行っているので異常系では検証しません。
フロー全体

まずはMunitフローをクリックして、Flow Referenceで期待されるエラータイプを設定します。
今回はRequestコンポーネントで”HTTP:INTERNAL_SERVER_ERROR”を出力するので”HTTP:INTERNAL_SERVER_ERROR”を指定します。
Execution
今回はEventは特に必要がないので入れていません。テストを行うフローでクエリパラメータやURIパラメータでchoiceを行うような場合は必要になるかと思います。
Behavior

Requestコンポーネントをモックし、Then returnのErrorのTypeIdで”HTTP:INTERNAL_SERVER_ERROR”と入力します。このとき確認したいエラーコードを指定してあげることで500エラー以外のテストも行えます。
Validation
返ってくるValiableとPayloadをAssert equalsで検証します。
Munit実施後のフロー
簡単にですが、Munitを実施した際の画面を見てみましょう。

Munitの結果は上図のように表示されます。
Runは実行されたMunitのフロー数、Errorsはエラーが起こったMunitのフロー数、Failuresは検証を行ったが、正しい値ではなかったフロー数になります。
Munitを行ったフローは下図のようになり、Munitを行ったコンポーネントにチェックマークがつきます。

すべてのルートが通るように検証を行いましょう。
まとめ
Mulesoftの単体テストであるMunitに関して記載しました。
基本的な内容にはなりますが、Mulesoftの学習のお手伝いになれば幸いです。
このほかにもMuleSoftの記事を書いておりますので、よかったら参考にしてください。
