テスト用のリソースのモッキング

テストスイートが肥大化し複雑になり始めたら、テストコードの一部をコードを「外部化」するのが良いでしょう。外部化により、コードを見やすく整理できるだけではなく、テストをモッキングするのに必要なファイルを再利用できます。

Mule 3 では、​getResourceAsString()​ 関数を使用して外部 (モック) リソースをテストに組み込んでいます。Mule 4 では、DataWeave スクリプトを作成するか、または DataWeave モジュールで変数を使用することで、テストコードをモッキングできます。

DataWeave ファイルを使用したファイルのモック

モッキングするデータを返す DataWeave ファイルを作成し、​src/test/resources​ フォルダーに保存してから、テストで DataWeave の関数を使用してこのファイルを読み込みます。

たとえば、​src/test/resources/sample_data​ フォルダーに ​mockPost.dwl​ というファイルを次のコンテンツで作成してあるとします。

%dw 2.0
output application/json
---
{
	"foo" : "var"
}

この DataWeave ファイル (​mockPost.dwl​) は、​http:request​ 要求で返されるモックペイロードを作成するサンプルです。

mock-when​ で ​then-return​ セクションを設定する場合には、​readUrl​ 関数を使用してマッピングファイルを読み込みます。

<munit-tools:then-return>
  <munit-tools:payload value="#[readUrl('classpath://sample_data/mockPost.dwl')]" mediaType="application/json" encoding="UTF-8" />
</munit-tools:then-return>

classpath-based​ URL では、​classpath:​ プロトコルプレフィックスを使用して ​src/test/resources​ で定義されているファイルを探します。

DataWeave モジュールで変数を使用したファイルのモック

DataWeave 変数を使用してデータを宣言することで、モックデータを単一のファイルにまとめた DataWeave モジュールを作成できます。

たとえば、​src/test/resources​ フォルダーに ​TestData.dwl​ ファイルを作成することでカスタム DataWeave モジュールを作成し、異なるモックデータを (ファイルから、またはインラインで) 参照する変数を追加します。

import getResourceAsString from MunitTools

var mockPost = readUrl('classpath://sample_data/mockPost.dwl')
var foo = "N123"
var jsonFromFile = read(getResourceAsString('sample_data/mydata.json'), 'application/json')
var jsonObject = { paymentID: "1B56925769601335TLQMIWVY" }

その後、自分のモジュールで変数をインポートすることによって DataWeave モジュールで定義されている変数にアクセスできます。

<munit-tools:then-return >
    <munit-tools:variables>
        <munit-tools:variable key="ticket" value="#[import TestData output application/json --- TestData::mockPost]" mediaType="application/json" />
    </munit-tools:variables>
</munit-tools:then-return>