Munitの作り方

こんにちは。株式会社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を検証

具体的な例で各コンポーネントを紹介していければと思います。

main-appFlowの図。
最初にListenerを配置し、次にTransform Messageでマッピング、その後Requestコンポーネントを配置しリクエストを送る
そのようなフロー。

上記のようなフローを用意しました。

  1. Listenerでリクエストを受け付けます
  2. Transform Messageでマッピングを行います
  3. Requestコンポーネントを配置し、別システムにリクエストすることを仮定します
  4. Responseのpayloadをマッピングします
  5. On Error Propagateはエラーが起こった際の処理に利用します

正常系のMunit

main-appFlowの図。
最初にListenerを配置し、次にTransform Messageでマッピング、その後Requestコンポーネントを配置しリクエストを送る
そのようなフロー。

正常系の範囲はListenerの後のところになります。

確認する内容としては、下記になります。

  1. Set Request Payload(Transform Message)のマッピングが想定通りできているか
  2. 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エラーが返ってくるケースを作成します。

確認する内容としては、下記になります。

  1. Requestコンポーネントでエラーが発生した際にOn Error Propagateで処理されているか
  2. Set Valiableでセットした値になっているか
  3. 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の記事を書いておりますので、よかったら参考にしてください。

「Mulesoft開発」あるある!よくある質問回答集(開発者向け) – 株式会社VALGO 

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です