I-16-8. Webアプリケーションのテスト支援ツールCactus

Javaソフトウェアのテスト支援ツールであるJUnitを紹介し、JUnitでテストできないServletやJSPに対応したCactusを説明する。テストコードの記述方法、テストの実行方法を解説する。

【学習の要点】

* JUnitはJavaプログラム用のテスト支援ツールとして広く利用されている。

* Cactusを利用することで、JUnit単独では出来ない、ServletやJSPのテストの自動化を行うことが出来る。

図I-16-8. Cactusによるテストの流れ

【解説】

1) JUnitとは

JUnitはJavaプログラムをテストするためのツールである。JUnit単独で動作するほか、Antや統合開発環境Eclipseのプラグインとしても利用可能である。

2) Cactusとは

Cactusとは、Jakartaプロジェクトで開発されている、サーバ側のJavaプログラムをテストするためのフレームワークである。JUnitを拡張しており、JUnit単独では出来ない、ServletやJSPのテストが可能である。また、テストの自動化のために、Antと連動して動作する機能を提供している。

3) Cactusの動作

Cactusでは、クライアントとサーバの双方に同一のテストクラスを配置し、クライアントとサーバ間のHTTP通信を、Redirector Proxyとよばれるオブジェクトを介して処理する。

* クライアント側では、JUnitで用意されているTestRunnerクラスが、テストクラスのrunTest()メソッドを呼び出す。

* runTest()がbeginXXX()メソッド(XXXにはテスト毎につける名称が入る)を呼び出す。

* runTest()がRedirector Proxyに対しHTTPリクエストを発行する。

* サーバ側では、Redirector ProxyがテストクラスのtestXXX()メソッドを呼び出す。

* testXXX()では、サーバ側のテスト対象となるクラスを呼び出し、JUnitのAPIを使用してテスト結果をチェックする。

* Redirector ProxyはクライアントにHTTPレスポンスを返す。テストが失敗した場合は、例外に関する情報をクライアント側に返す。

* 例外が発生しなければ、クライアント側で、runTest()がendXXX()メソッドを呼び出す。

4) テストコードの記述方法

* テストクラスの作成

Cactusには以下の3つのテストケースクラスが用意されているので、テスト対象のコードに応じて、これらのクラスを継承してテストクラスを作成する。

- ServletTestCase Servlet用

- JspTestCase JSP、カスタムタグ用

- FilterTestCase フィルタ用

* テストメソッドの作成

上で作成したクラスにおいて、テスト毎に、beginXXX()、testXXX()、endXXX()の3つのメソッドを記述する。beginXXX()では設定するHTTPリクエスト情報、endXXX()では取得するHTTPレスポンス情報が引数となる。

5) テストの実行方法

CactusにはAntでテストを実行するためのビルドファイルbuild.xmlが用意されており、「test」という名のtargetが記述されている。「ant test」コマンドを実行することで、テストを実行でき、結果が出力される。その他のテスト実行方法としては、統合開発環境EclipseにCactusRunnerプラグインを導入してテストする方法などがある。

OSS Course Naviのコンテンツは IPA OSS モデルカリキュラムを基としています。