前回、BDDFrameworkの概要を確認しました。
今回は1ケースを対象に実際にテストを書いてみます。
Table of Contents
テスト内容
長時間動作するバッチ処理があり、その進行状況をステップごとに記録していくとします。
- テスト対象で操作するEntity JobStatus
- Id
- JobId(ジョブを特定するId),
- Step(そのジョブの何ステップ目か)
- ExecutedDateTime(ステップ終了日時)
- Message(管理者向け進行状況メッセージ)
- テスト対象:GetJobStatusMessage Action
- JobStatusをJobIdで検索し、管理者向けのメッセージを返す
- 入力パラメータ:JobId
- 出力パラメータ:管理者向けのメッセージ(各ステップの終了日時とメッセージを結合し、ステップごとに改行文字で区切ったもの)
- テストケース
- Given(前提条件の成立を確認する):JobId=2のバッチジョブにStep=1とStep=2が記録されている
- When(テスト操作):GetJobStatusMessageをJobId=2で呼び出す
- Then(テスト結果の確認):出力パラメータが「Step1 <実行日時> メッセージ<改行>Step2 <実行日時> メッセージ」である
テストケース作成
まずは、テスト対象モジュールとは別のアプリケーションにテストモジュールを作成し、テスト対象モジュールとBDDFrameworkを参照しておきます。
テストケースは、BDDScenarioというWeb Block1つで表されます。
従って、まずはテストケースを配置する画面を作成。
作成した画面にBDDScenarioをドラッグ&ドロップで配置します。
テストケースの説明
ここは普通の文字列で設定します。
例:2ステップ持つジョブを指定してメッセージが結合されることを確認
テストケースの本体
3つのPlaceholderそれぞれに、BDDStep Blockをドラッグ&ドロップし、Destinationに用意したActionを設定していきます。
テストケースのAction名には共通のプレフィックス(例えば、ステップ2つを使ったテストという意味で、「TwoSteps_」のような)をつけることが勧められています。
TwoSteps_Given
テスト準備として、テスト対象ジョブID=2のレコードが、テストに使う2レコードだけになるように準備しています。本当はテストデータの準備はSetupでやるようですが、Setupはこのシリーズの(3)でやるので、今回はここでテストデータを準備しています。
TwoSteps_When
テスト対象Actionを呼び、後で検証に使うために出力を画面のローカル変数に格納しています。
TwoStep_Then
いわゆるAssert(BDDFramework提供のActionです)を呼び出して、結果が特定の条件を満たすことを検証しています。
作成後のScenario
テスト実行
いつも通りにテストモジュールを1-Click Publishしてブラウザてテスト画面を開くとテストが実行されます。
下の実行結果サンプルは、テストだけ作成し、テスト対象Actionは空にした場合です。ThenでAssertが失敗しているため、背景が赤くなっています。
TDD的にやるなら、この画面を見てから、テスト対象Actionを実行し、再度Publishしてブラウザで開き直すという手順ですね。
テスト対象モジュール修正→パブリッシュ→テストモジュール参照更新→パブリッシュ→ブラウザでテスト、という手順は重いですね。
テスト対象モジュールを実装してから再テスト。全部グリーンになりました。