第3章 テストシナリオの作成および実行
ビジネスルールデータをデプロイする前に、Decision Central にテストシナリオを作成して、その機能をテストできます。基本的なテストシナリオには、少なくても以下のデータが必要です。
- 関連するデータオブジェクト
- GIVEN (指定した) ファクト
- EXPECT (想定される) 結果
テストシナリオでは、このデータを使用し、定義したファクトに基づいて、そのルールインスタンスに対して想定した結果と実際の結果の妥当性を検証できます。CALL METHOD と利用可能な globals をテストシナリオに追加することもできますが、これは必須ではありません。
手順
-
Menu
Design Projects に移動して、プロジェクト名をクリックします。 -
Create New Asset
Test Scenario をクリックします。 - テストシナリオ 名を入力し、適切な パッケージ を選択します。指定するパッケージは、必要なデータオブジェクトとルールアセットが割り当てられている、またはこれから割り当てるパッケージにする必要があります。
OK をクリックして、テストシナリオを作成します。
Project Explorer の Test Scenarios パネルに、新しいテストシナリオが追加されました。
- Data Objects タブをクリックして、テストするルールに必要なデータオブジェクトがすべてリストされていることを検証します。追加されていない場合は、New item をクリックして別のパッケージから必要なデータオブジェクトをインポートするか、パッケージに データオブジェクトを作成 します。
データオブジェクトをすべて配置したら、テストシナリオデザイナーの Editor タブに戻り、利用可能なデータオブジェクトのシナリオに、 GIVEN データと EXPECT データを定義します。
図3.1 テストシナリオデザイナー
GIVEN セクションには、テストする入力ファクトを定義します。たとえば、プロジェクトの「Underage」ルールで、ローン申請者の年齢が 21 歳未満であれば承認しない場合は、テストシナリオの GIVEN ファクトで、
Applicantのageに、21 より小さい数字を設定する必要があります。EXPECT セクションには、GIVEN に入力したファクトに基づいて想定される結果を定義します。つまり、入力ファクトを GIVEN (指定) すると、その他のファクトが有効であること、またはルール全体が有効であることを EXPECT (想定) します。たとえば、シナリオで、申請者が 21 歳未満の場合に 想定される 結果は、(申請者の年齢が基準を満たさないため)
LoanApplicationのapprovedがfalseになるか、「Underage」ルール全体が有効になります。CALL METHOD と globals をテストシナリオに追加することもできます。
-
CALL METHOD: ルールの実行を開始する際に、別のファクトからメソッドを呼び出します。CALL METHOD をクリックし、ファクトを選択し、
をクリックして呼び出すメソッドを選択します。(可能な場合は) プロジェクトに対してインポートした Java ライブラリー、または JAR から (ArrayList のメソッドなどの) Javaクラスメソッドを呼び出すことができます。
- globals: テストシナリオで妥当性を確認するプロジェクトにグローバル変数を追加します。globals をクリックして、妥当性を確認する変数を選択し、テストシナリオデザイナーでグローバル名をクリックして、グローバル変数に適用するフィールド値を定義します。グローバル変数が利用できない場合は、Decision Central に新しいアセットとして作成する必要があります。グローバル変数は、ルールエンジンに表示されますが、ファクトに対するオブジェクトとは異なるオブジェクトの名前です。グローバルのオブジェクトを変更しても、ルールの再評価は行われません。
-
CALL METHOD: ルールの実行を開始する際に、別のファクトからメソッドを呼び出します。CALL METHOD をクリックし、ファクトを選択し、
- 必要に応じて、テストシナリオデザイナーの下部で More をクリックし、同じシナリオファイルに別のデータブロックを追加します。
- シナリオに対して、GIVEN、EXPECT、その他のデータをすべて定義したら、テストシナリオデザイナーで Save をクリックして、設定した内容を保存します。
右上の Run scenario をクリックして、この
.scenarioファイルを実行します。プロジェクトパッケージに.scenarioファイルを複数保存している場合は、Run all scenarios をクリックして、すべてのシナリオを実行します。Run scenario オプションでは、対象の.scenarioファイルを保存する必要はありませんが、Run all scenarios オプションを使用する場合は、すべての.scenarioファイルを保存する必要があります。テストに失敗したら、ウィンドウ下部の レポート メッセージに記載されている問題に対応し、シナリオの全コンポーネントを見直し、エラーが表示されなくなるまで妥当性確認を行います。
- 変更がすべて終了したら、テストシナリオデザイナーで Save をクリックして、設定した内容を保存します。
GIVEN ファクトをテストシナリオに追加する方法は 「テストシナリオへの GIVEN ファクトの追加」 を参照してください。
EXPECT 結果をテストシナリオに追加する方法は 「テストシナリオへの EXPECT 結果の追加」 を参照してください。
3.1. テストシナリオへの GIVEN ファクトの追加 リンクのコピーリンクがクリップボードにコピーされました!
GIVEN セクションは、テストする入力ファクトを定義します。たとえば、プロジェクトの「Underage」ルールで、ローン申請者の年齢が 21 歳未満であれば承認しない場合は、テストシナリオの GIVEN ファクトで、Applicant の age に、21 より小さい数字を設定します。
前提条件/事前作業
テストシナリオに必要なデータオブジェクトがすべて作成、またはインポートされていて、テストシナリオデザイナーの Data Objects タブにリストされています。
手順
テストシナリオデザイナーで GIVEN をクリックすると、利用可能なファクトが追加されている New input ウィンドウが開きます。
図3.2 テストシナリオへの GIVEN 入力の追加
リストには以下のオプションが含まれます。表示されるオプションは、テストシナリオデザイナーの Data Objects タブで利用可能なデータオブジェクトによって異なります。
- Insert a new fact: ファクトを追加して、フィールド値を修正します。Fact name にファクトの変数を入力します。
- Modify an existing fact: (別のファクトが追加されている場合に限り表示) シナリオの実行と実行の間に、デシジョンエンジンにすでに挿入されていて、修正したいファクトを指定します。
- Delete an existing fact: (別のファクトが追加されている場合に限り表示) シナリオの実行と実行の間に、デシジョンエンジンにすでに挿入されていて、削除したいファクトを指定します。
- Activate rule flow group: そのグループ内にあるすべてのルールをテストできるように、有効にするルールフローグループを指定します。
-
目的の入力オプションに対するファクトを選択し、Add をクリックします。たとえば、Insert a new fact: に Applicant を設定し、Fact name に対して
aまたはapp、もしくは別の変数を入力します。 テストシナリオデザイナーのファクトをクリックし、修正するフィールドを選択します。
図3.3 ファクトフィールドの修正
編集アイコン (
) をクリックし、以下のフィールド値を選択します。
- Literal value: 特定のリテラル値を入力するオープンフィールドを作成します。
- Bound variable: フィールドの値を、選択した変数にバインドするファクトに設定します。フィールドタイプが、バインドした変数型に一致する必要があります。
- Create new fact: 新しいファクトを作成し、そのファクトを親ファクトのフィールド値として割り当てます。テストシナリオデザイナーで子ファクトをクリックし、同じようにフィールド値を割り当てるか、別のファクトをネストできます。
- 続いて、シナリオに別の GIVEN 入力データを追加し、テストシナリオデザイナーで Save をクリックして、設定した内容を保存します。
3.2. テストシナリオへの EXPECT 結果の追加 リンクのコピーリンクがクリップボードにコピーされました!
EXPECT セクションは、GIVEN に入力したファクトに基づいて想定される結果を定義します。つまり、入力ファクトを GIVEN (指定) すると、その他に指定したファクトが有効であること、またはルール全体が有効であることが EXPECT (想定) されます。たとえば、このシナリオで、申請者の年齢が 21 歳未満である「ファクト」を指定した場合、EXPECT (想定) される結果は、(申請者の年齢が基準を満たさないため) LoanApplication の approved が false になるか、「Underage」ルール全体が有効になります。
前提条件/事前作業
テストシナリオに必要なデータオブジェクトがすべて作成、またはインポートされていて、テストシナリオデザイナーの Data Objects タブにリストされています。
手順
テストシナリオデザイナーで EXPECT をクリックし、利用可能なファクトが追加されている New expectations ウィンドウを開きます。
図3.4 テストシナリオへの EXPECT 結果の追加
リストには以下のオプションが含まれます。表示されるオプションは、GIVEN セクションのデータや、テストシナリオデザイナーの Data Objects タブで利用可能なデータオブジェクトによって異なります。
- Rule: プロジェクトに、GIVEN に指定した内容に対して有効になることが想定される特定のルールを指定します。ルールの名前を入力するか、ルールリストから選択します。次に、テストシナリオデザイナーで、ルールが有効になるべき回数を指定します。
- Fact value: ファクトを選択し、GIVEN セクションに定義したファクトに対して有効になることが想定される値を定義します。ファクトは、GIVEN の入力に対して事前に定義した Fact name でリストされます。
- Any fact that matches: GIVEN に指定した内容に対して、指定した値を持つファクトが最低 1 つ存在するかどうかの妥当性を確認します。
-
(Fact value:
applicationなど) 期待される結果のファクトを選択し、Add または OK を選択します。 テストシナリオデザイナーでファクトをクリックし、追加または修正するフィールドを選択します。
図3.5 ファクトフィールドの修正
-
フィールド値に、GIVEN に指定した内容に対して、有効になると想定される値 (
approved|equals|falseなど) を設定します。 - 続いて、シナリオに別の EXPECT 入力データを追加し、テストシナリオデザイナーで Save をクリックして、設定内容を保存します。
シナリオに GIVEN、EXPECT、その他のデータを定義して保存したら、右上の Run scenario をクリックしてこの
.scenarioファイルを実行します。プロジェクトパッケージに保存した.scenarioが複数ある場合は、Run all scenarios をクリックして保存したすべてのシナリオを実行します。Run scenario オプションでは、対象の.scenarioファイルを保存する必要はありませんが、Run all scenarios オプションを使用する場合は、すべての.scenarioファイルを保存する必要があります。テストに失敗したら、ウィンドウ下部の レポート メッセージに記載されている問題に対応し、シナリオの全コンポーネントを見直し、エラーが表示されなくなるまで妥当性確認を行います。
- 変更がすべて終了したら、テストシナリオデザイナーで Save をクリックして、設定した内容を保存します。