droolsの動作確認(テストシナリオ)

前準備

Droolsの環境とルールを作成しておきます。

↓環境構築 takeiteasy-09.net

↓オブジェクトとルール作成 takeiteasy-09.net

テストの作成

以前に作成したルールがちゃんと動作するかを確認するため、テストを作成します。

プロジェクト画面から「アセットの追加」をクリックします。

f:id:akky97:20201204110328p:plain

「テストシナリオ」を選択します。

f:id:akky97:20201204110522p:plain

テストシナリオ名を入力し、パッケージはプロジェクトを選択します。

f:id:akky97:20201204110809p:plain

テストを入力する画面が表示されます。「GIVEN」列がテスト時に使用する情報(ファクト)、「EXPECT」列が想定される結果情報になります。

今回の場合、本のタイトルから値段を得るため、ここには本のタイトルを入力することになります。

f:id:akky97:20201204111018p:plain

「GIVEN」列の「INSTANCE1」をクリックするとデータオブジェクトの選択画面が表示されるので、ここから本のタイトルになるプロパティ を選択し、「データオブジェクトの挿入」ボタンをクリックします。

f:id:akky97:20201204111457p:plain

「GIVEN」列の情報が選択された内容に変わります。

f:id:akky97:20201204111733p:plain

続いて、「EXPECT」列の「INSTANCE2」をクリックし、データオブジェクト選択画面から本の値段になるプロパティ を選択し、「データオブジェクトの挿入」ボタンをクリックします。

f:id:akky97:20201204112157p:plain

「EXPECT」列の情報が更新されます。

f:id:akky97:20201204112320p:plain

テストデータの入力

このプロジェクトでは本が二冊「入門Java」と「独習C++」の値段を返すルールを作成していますので、まずは「入門Java」の値段が正しく判別できるかの確認テストを書いてみます。

1行目の「Senario description」にはテストの説明を入力します。「GIVEN」列の「title」には値段を調べるための本のタイトルを入力、「EXPECT」列の「price」には期待される値段を入力します。

f:id:akky97:20201204112739p:plain

「保存」ボタンをクリックして入力したデータを保存し、「再生」ボタンをクリックするとテストが実行されます。すると、テストレポートが表示され、テスト結果を確認することができます。

f:id:akky97:20201204113252p:plain

もう一冊の「独習C++」のテストも追加してみます。表を右クリックし、メニューの中の「行を下に追加」をクリックします。

f:id:akky97:20201204113650p:plain

一冊目の入力と同じ要領で二冊目の情報を入力します。

f:id:akky97:20201204113856p:plain

これでテストを実行してみます。 テストレポート画面のシナリオ数が増えていることがわかるかと思います。

f:id:akky97:20201204114042p:plain

このテストシナリオでは「入門Java」だったら値段は「2500」であることを期待する、「独習C++」だったら値段は「3000」であることを期待する、という内容になります。

ですので、例えば「入門Java」の値段の期待する内容を「2800」とするとテストが失敗し、以下のようなテストレポートとなります。

f:id:akky97:20201204114351p:plain

テストが失敗していること、期待値と合っていない箇所が赤字になります。

この時、表の赤字部分にマウスカーソルを当てると実際の値とどう違ったかが確認できます。

f:id:akky97:20201204114707p:plain

吹き出し中には「保持」と「適用」のボタンが表示されていますが、それぞれ以下の内容となります。

  • 保持

    テストケースが正しいと判断する場合に選択します。つまり次のアクションとしてはルールの内容を見直すこと(ルールが間違っていないか)になります。

  • 適用

    テストケースが違っていると判断する場合に選択します。テストケースとして期待する値が間違っており、実際に返却される値が正しいと判断されるので、こちらを選択するとテストケースが修正されます。(「2800」→「2500」に修正される)