MUnit テスト構造の基礎

MUnit テストスイート

MUnit のベースファイルは、テストスイートファイルです。これは、XML ファイルで、Mule アプリケーションのプロジェクトの ​src/test/munit​ ディレクトリにあります。MUnit テストスイートファイルの数に上限はありません。各 MUnit テストスイートファイルは、MUnit テストのコレクションで、他の MUnit テストスイートとは独立して実行されます。

MUnit テストスイートには、次のコンポーネントのいずれかの組み合わせが含まれています。

  • Before/After Suites

  • Before/After Test

  • MUnit テスト

バックグラウンドでは、各 MUnit テストスイートと Mule 設定ファイルに違いはありません。複数の Mule 最上位要素 (フロー、サブフロー、スクリプトなど) を使用できます。

MUnit 設定

MUnit 設定要素 (​munit:config​) は、MUnit スイートファイルなどの Mule 設定ファイルを識別します。

<?xml version="1.0" encoding="UTF-8"?>
<mule xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:munit="http://www.mulesoft.org/schema/mule/munit" xmlns:munit-tools="http://www.mulesoft.org/schema/mule/munit-tools"
	xmlns="http://www.mulesoft.org/schema/mule/core"
	xsi:schemaLocation="
		http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
		http://www.mulesoft.org/schema/mule/munit http://www.mulesoft.org/schema/mule/munit/current/mule-munit.xsd
		http://www.mulesoft.org/schema/mule/munit-tools  http://www.mulesoft.org/schema/mule/munit-tools/current/mule-munit-tools.xsd">

	<munit:config name="An MUnit Suite" />

	<!-- Tests -->

</mule>

MUnit テスト

MUnit テストは、MUnit テストスイートの基本的なプロセッサーです。これは、試行する各テストシナリオを表します。

MUnit テストは、3 つのスコープに分かれています。すべて省略可能です。

範囲 説明

Behavior

Behavior スコープは、テストロジックを実行する前にすべての前提条件を設定します。
このスコープには、モックやスパイが含まれます。

Execution

Execution スコープには、次のスコープを実行する前にすべてのプロセスが終了するまで待機するテストロジックがあります。

Validation

Validation スコープには、Execution スコープの結果に関連するすべての検証があります。
このスコープには、アサーションや検証が含まれます。

<munit:test name="exampleTest" description="Test to verify scenario 1">>

     <munit:behavior>
         <munit-tools:mock-when.../>
     </munit:behavior>

     <munit:execution>
         <flow-ref name="exampleFlow"/>
     </munit:execution>

     <munit:validation>
         <munit-tools:assert-that ...>
     </munit:validation>
 </munit:test>
munit-test
Figure 1. Studio での MUnit テストの表現

MUnit テストリファレンス

名前 説明

name

テストの名前を定義します。名前は、テストスイート内で一意である必要があります。
この属性は必須です。

description

テストするシナリオを説明します。
この属性は必須です。

ignore

テストを無視する必要があるかどうかを定義します。存在しない場合、テストは無視されません。

tags

テストに割り当てるタグのカンマ区切りリスト。

expectedErrorType

このテストの実行後に受け取る必要があるエラー種別を定義します。

expectException

このテストの実行後に受け取る必要がある例外を定義します。

MUnit テストの説明属性

MUnit では、テストの説明を作成する必要があります。テストするシナリオの内容を反映する有益な説明を作成することが理想的です。この説明は、テストを実行する前のテストコンソールやレポートに表示されます。正確に内容が反映された説明ほど、読みやすく、エラーのトラブルシューティングが容易になります。

テストの無視

テストを停止しなければならない場合があります。どのような原因 (テストの失敗や不都合な副作用) でも関係ありません。MUnit では、特定のテストを無視できるため、コードを手動でコメントアウトする必要はありません。

任意のテストを無視するには、ブール型の ignore をテスト定義に追加します。

<munit:test name="my-flow-Test"
      ignore="true"
      description="Test to verify scenario 1">
</munit:test>

ignore 属性のデフォルト値は ​false​ です。

Anypoint Studio では、​[Ignore Test (テストを無視)]​ オプションをオンにできます。

ignore-test

タグ属性のテスト

MUnit では、テストにタグを付けて、特定のタグのテストを実行できます。次に例を示します。

<munit:test
  name="exampleTest"
  description="A test that works as an example"
  ignore="true"
  tags="integration,http" >
		…
</munit:test>
test-tags
Figure 2. Anypoint Studio では、適切な項目でタグを定義できます。

MUnit テストの想定されるエラーおよび例外属性

テストしているフローまたはサブフローが失敗して、特定のエラーをスローするかどうかを検証したいとします。MUnit では、次のように ​expectedErrorType​ 属性と ​expectException​ 属性を追加できます。

<munit:test name="MUnit-test-suite"
  description="A test that works as an example"
  expectedErrorType="RETRY_EXHAUSTED"
  expectedException="java.lang.RuntimeException"
  expectedErrorDescription="retries exhausted">
  ...
</munit:test>
munit test concept e7280
Figure 3. Anypoint Studio での視覚表現
  • expectedErrorType​ 属性では、テスト対象アプリケーション内で定義されているエラー ID を想定しています。
    この属性では、アプリケーション内で定義されているエラー種別がスローされるかどうかを検証できます。アプリケーションに存在しない ​errorType​ を定義すると、テストは実行されません。

    <munit:test name="MUnit-test-suite"
      description="Test Error Type"
      expectedErrorType="FTP:ILLEGAL_PATH">
      ...
    </munit:test>

    このエラー種別のテストでは、FTP 操作で ​FTP:ILLEGAL_PATH​ エラーがスローされることを想定しています。
    どのフローも FTP Connector を使用していない場合、このエラー種別がアプリケーション内で定義されていないため、テストは実行されません。

    Mule Runtime に属する ErrorTypes は、類型化する必要はありません。たとえば、​MULE:RETRY_EXHAUSTED​ は、​RETRY_EXHAUSTED​ として定義できます。

  • 属性 ​expectException​ では、リテラル例外クラス名を想定しています。
    想定している例外の正規クラス名を指定する必要があります。その後、MUnit はスローされた例外の根本原因が、想定しているクラス名の種類とまったく同じであるかどうかを検証します。

    <munit:test name="testExceptions"
      description="Test Exceptions"
      expectedException="java.lang.RuntimeException">
      ...
    </munit:test>

    例外を想定するテストを定義したが、何もスローされない場合、テストは即座に失敗します。

Before および After スコープ

他のテストフレームワークと同様に、MUnit では MUnit テストまたは MUnit テストスイート全体の実行の前後に実行する処理やアクションを追加できる一連のスコープが提供されます。

  • Before および After Suite スコープ。

  • Before および After Test スコープ。

各コンポーネントの ID 項目は、すべてのアプリケーションで一意である必要があります。Before および After スコープは、それらの間で同じ名前を共有することも、アプリケーションのフローと同じ名前を持つこともできません。

詳細は、​「Before/After スコープ」​リファレンスを参照してください。