4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

MUnitを使ってみる

Posted at

Muleアプリケーションのためのテストフレームワーク、MUnitを少し使ってみようと思います。

簡単なテストの作成

まずは、テストする簡単なフローを作成します。
サンプルフローその1.JPG
HTTP Listnerでリクエストを受け付けて、Payloadに「Hello World」をセットして応答するだけの簡単なアプリケーションとします。
続いてこのフローのテストを作成します。
Anypoint Studioのプロジェクトを右クリック > Mew > MUnit Testを指定します。
MUnitテスト作成1.JPG
「MUnit test suite」ダイアログボックスが表示されるので、先ほど作成したサンプルフローにチェックを入れて「Finish」ボタンを押下します。「Execution」でテスト対象のフローを呼び出すMUnitテストが作成されますので、結果の検証を行うため「Validation」に「Assert that」を追加します。
MUnitテスト1.JPG
「Assert that」のプロパティに以下を指定します。

  • General> Expressionとして、#[payload]を指定
  • Isで#[MunitTools::matches('Hello World')]

※ MunitToolsの使い方については以下あたりを参照してください。
https://docs.mulesoft.com/munit/2.1/munit-matchers

これで準備完了です。テストを右クリックして「Run MUnit test」を選択してください。
結果1.JPG
テストが実施され成功します。
試しに比較する文字を「Stop World」に変更して実施してみてください。ちゃんとテストが失敗します。

Mockを使用する

つづいて、モック機能を使用してみようと思います。
サンプルフローにHTTPリクエストするコネクターを追加します。
接続先は架空のものにします。
モック1.JPG
ここで一度テストを実施してみましょう。「Connection refused」のエラーが発生してテストは失敗します。
そこで、HTTPリクエストの結果をMock化して、何かしらの正常な値が返却するようにします。
モック2.JPG
Behaviorに「Mock when」を配置し、以下を設定します。

  • General > Processorに「http:request」
  • Then returnを「Edit inline」
  • Payloadにチェック
  • Payload > Valueに#['Stop World']

ついでにAsert Thatの比較文字も「'Stop World'」に変更します。

モック3.JPG

テストを実施してください。テストが成功します。(Mockが設定されたため、HTTPのRequestコネクターで接続エラーとならず、結果として'Stop World'を返却されていたためです。)

Spyを使用する

次にSpyを使用してみます。Spyはテスト対象のフロー内のあるイベントが呼ばれた前後の動作の検証が行える機能です。
まずは、サンプルフローを以下のように変更します。
スパイ1.JPG

  • sub_flowを追加して、Set PayloadでPayloadを「Start World」に変更するようにします。
  • メインフローからサブフローを呼び出すFlow Referenceを追加します。(Display Nameを「call sub_flow」としてください。)

次に、追加したこのFlow Referenceの前後のpayloadの値を検証するSpyをテストに追加します。
スパイ2.JPG

Spyの設定は以下のようになります。
スパイ3.JPG

Processorには「mule:flow-ref」と、「mule:」を指定します。
また、flow-refを特定する必要がある(テスト対象にはflow-refは一つしか配置されていないのですが、テスト時の呼び出しと区別する必要がある(?)ようです)ため、With attributesのEdit inlineで以下を指定します。

doc:name = call sub_flow

最後にSpyのBefore、AfterにAssert thatを追加し、それぞれPayloadが「Stop World」、「Start World」になるかを確認するように指定してください。

テストを実施して、テストが通ることを確認してください。
また、念のためMockや、sub_flowの処理を変更して、Spyのテストが正しく動作しているかを確認してみてください。

カバレッジの確認

最後にカバレッジレポートを作成します。
カバレッジ1.JPG
Munit CoverageというViewがありますので、そのViewの「Generate Report」ボタンを押してみてください。以下のようなHTML形式のレポートが生成されます。

カバレッジ2.JPG

あまり、いいサンプルではないですが。。

まとめ

以上で、MuleSoft Anypoint Platformのテストツール、MUnitの基本的な操作方法を簡単に説明してみました。
Flowと同様、慣れてしまえば割と簡単に自動テストが作れそうな感じがしますが、いかがでしょうか。

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?