Mock When イベントプロセッサについて

Mock When プロセッサでは、定義された名前と属性に一致したときにイベントプロセッサをモックできます。

たとえば、モックイベントプロセッサを使用して、モックペイロードで POST 要求をモックできます。

<munit-tools:mock-when processor="http:request">
   <munit-tools:with-attributes>
       <munit-tools:with-attribute attributeName="method" whereValue="#['POST']"/>
   </munit-tools:with-attributes>
   <munit-tools:then-return>
       <munit-tools:payload value="#['mockPayload']"/>
   </munit-tools:then-return>
</munit-tools:mock-when>

モックするプロセッサを定義するように ​processor​ 属性を設定し、属性の名前と値を定義するように ​with-attribute​ 要素を設定できます。上記の例では、POST メソッドを定義しています。

DataWeave の機能とマッピングを利用して、​then-return​ 要素の ​value​ 属性を設定することもできます。たとえば、次のように ​src\test\resources\sample_data​ ファイル内に ​mockPost.dwl​ を作成します。

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

次の Dataweave ファイルは、POST 要求で送信するペイロードを作成してから、​readUrl​ DataWeave 機能を使用してマッピングファイルを読み込みます。

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

最後に、モックプロセッサが返す応答種別を定義するように ​then-return​ 要素を設定できます。ペイロード、変数、属性、またはエラーにさえもすることができます。

たとえば、次のような Web サービスコンシューマをモックできます。

<wsc:config name="Web_Service_Consumer_Config">
  <wsc:connection wsdlLocation="tshirt.wsdl" service="TshirtService" port="TshirtServicePort" address="http://tshirt-service.cloudhub.io"/>
</wsc:config>

<wsc:consume config-ref="Web_Service_Consumer_Config" operation="OrderTshirt"/>

次の例のように、mock-when プロセッサを設定します。

<munit-tools:mock-when processor="wsc:consume">
    <munit-tools:with-attributes>
        <munit-tools:with-attribute attributeName="operation" whereValue="#['OrderTshirt']"/>
    </munit-tools:with-attributes>
</munit-tools:mock-when>

この mock-when プロセッサは、WSDL 定義内の OrderTshirt 操作へのコールをモックします。

特定の変数をモックすることもできます。

<munit-tools:mock-when processor="http:request">
	<munit-tools:with-attributes>
	    <munit-tools:with-attribute attributeName="config-ref" whereValue="#['HTTP_Request_configuration']"/>
	</munit-tools:with-attributes>
	<munit-tools:then-return>
	  <munit-tools:variables>
	  	<munit-tools:variable key="#['aVariable']" value="#[aValue]"/>
	  </munit-tools:variables>
	</munit-tools:then-return>
</munit-tools:mock-when>

モックエラー

Mock When プロセッサは、操作でのエラーをモックすることもできます。たとえば、接続が失敗した場合に接続エラーをキャッチしてカスタムペイロードを返す、On-Error スコープを含む HTTP リクエスタがフロー内にあるとします。このシナリオでのサンプルアプリケーションは次のようになります。

<http:request-config name="HTTP_Request_configuration">
	<http:request-connection host="myHost" port="8888" />
</http:request-config>

<http:listener-config name="HTTP_Listener_config" >
	<http:listener-connection host="0.0.0.0" port="8081" />
</http:listener-config>


<flow name="myFlow">
	<http:listener config-ref="HTTP_Listener_config" path="/"/>
	<http:request method="GET" config-ref="HTTP_Request_configuration" path="/api"/>
	<error-handler >
		<on-error-continue enableNotifications="true" logException="true" type="HTTP:CONNECTIVITY">
			<set-payload value="#['Connection Error']" />
		</on-error-continue>
	</error-handler>
</flow>

HTTP 要求が失敗するたびに、アプリケーションはカスタムペイロードを返すとアサートできます。

<munit:test name="new-test-suiteTest" description="Asserts Custom Payload in HTTP Connectivity errors.">

  <munit:behavior >
    <munit-tools:mock-when processor="http:request">
        <munit-tools:with-attributes>
            <munit-tools:with-attribute attributeName="config-ref" whereValue="#['HTTP_Request_configuration']"/> (1)
        </munit-tools:with-attributes>
        <munit-tools:then-return>
          <munit-tools:error typeId="#['HTTP:CONNECTIVITY']"/> (2)
        </munit-tools:then-return>
    </munit-tools:mock-when>
  </munit:behavior>

  <munit:execution>
      <flow-ref name="myFlow"/> (3)
  </munit:execution>

  <munit:validation>
    <munit-tools:assert-that expression="#[payload]" is="#[MunitTools::equalToIgnoringCase('Connection  Error')]"/> (4)
  </munit:validation>

</munit:test>
1 フロー内のリクエスタの設定で HTTP 要求をモックします。
2 HTTP:CONNECTIVITY エラーをスローするように then-return 要素を設定します。
これにより、アプリケーション内の On-error スコープがトリガされます。
3 リクエスタを含むフローを実行します。
4 返されたペイロードが On-error スコープ内で設定したものであるとアサートします。

例外を使用したモックエラー

Mock When プロセッサでは、原因 (例外インスタンス) を指定してエラーをモックすることもできます。Dataweave を介して原因をインスタンス化するサンプルモックは次のようになります。

<munit-tools:mock-when processor="http:request">
  <munit-tools:with-attributes>
    <munit-tools:with-attribute attributeName="config-ref" whereValue="#['HTTP_Request_configuration']"/>
  </munit-tools:with-attributes>
  <munit-tools:then-return>
    <munit-tools:error cause="#[java!org::mule::runtime::api::connection::ConnectionException::new('MyMessage')]"/>
  </munit-tools:then-return>
</munit-tools:mock-when>

Was this article helpful?

💙 Thanks for your feedback!

Edit on GitHub