テストクラスを作る
先ほど作成したActionクラスに対してテストクラスを記述してみます。今回はパラメータnameの有無のみで遷移先が変わるという非常に単純なActionクラスなので、テストケースも以下の2つとします。
- (1)nameの値を設定しない場合
- (2)nameに値を設定する場合
では、テストクラスは以下のようになります。
public class ActionCaseTest extends StrutsSpringTestCase { /** * テストケース(1) */ public void testSendFailureAction() throws Exception { // 指定したURLのActionクラスを起動し、その戻り遷移先(result)を取得する ActionProxy proxy = getActionProxy("/model/send"); String result = proxy.execute(); // 特にリクエストパラメータを生成することなく実行する // その場合はmodel/send.actionは遷移先としてfalureを実行 // resultの値がfailureに等しいかを判定 assertEquals("failure", result); } /** * テストケース(2) リクエストパラメータに値を設定 */ public void testSendSuccessAction() throws Exception { // リクエストパラメータにnameを追加 request.addParameter("name", "名前A"); // 指定したURLのActionクラスを実行する、その戻り遷移先(result)を取得する ActionProxy proxy = getActionProxy("/model/send"); String result = proxy.execute(); // resultの値がfailureに等しいかを判定 assertEquals("success", result); } }
テストケースは以上の2つとなります。2番目のtestSendSuccessActionメソッド内で、リクエストパラメータを追加してから、テスト対象のActionクラスを呼び出しています。親クラスのメンバ変数requestが仮想のリクエスト属性になっており、JUnitプラグインを使うActionクラスでは自動的に利用できます。requestが利用できますので、HTTPセッションの取得も、request.getSession()で行えます。
なお、JUnitプラグインを使ってテストクラスを作るには、JUnitのルールに加えて次の決まりごとがあります。
- StrutsTestCaseまたはStrutsSpringTestCaseを継承する
どちらの親クラスも大差はありませんが、テスト対象のActionクラスがSpringプラグインを使ったものの場合、自動的にSpring Frameworkを使ったActionクラスの管理をしてくれ、リクエストパラメータの追加などが非常に簡単になるのでStrutsSpringTestCaseが良いでしょう。
では次に実際にJUnitを動作させた結果を見てみましょう。以下の画面は開発環境(IDE)の一つであるEclipseからJUnitを実行した結果になります。
まずは対象のクラスをJUnitで動作させます。
実行結果が次のようになります。すべての試験が想定された結果どおりであれば、緑色のチェックがつけられて緑色のゲージが出力されればすべての試験が無事行われて、エラーがなかったことが示されます。
このようにActionクラスの試験が非常に簡単にできるのが魅力で、Actionクラスが返すResultの結果をチェックすれば確認できるようになります。