Click Mock API
Click Mock は、Tomcat や Jetty のようなサーブレットコンテナを必要とせずにControl や Page をテストすることが可能となるフルスタックのモックです。
モックのパッケージは、個別のjarで提供されていて、ダウンロードしたClickの配布パッケージで利用可能です。distフォルダの click-mock-<version>.jar がそれになります。
テストのために用いられる、2つの関係するクラス - MocContainer と MockContext - が含まれます。
MockContainer
あなたが作成した Page をテスト(機能テスト)するには、Tomcat や Jetty のようなサーブレットコンテナを模した MockContainer を利用することになります。このコンテナを利用することで、テスト用のページリクエストやフォームサブミット、ファイルのアップロードやナビゲーション等を実行できます。
MockContainer を使用するためには、 javascriptやスタイルシート、画像などのリソースがあるwebディレクトリを指定する必要があります。一番簡単な方法は、プロジェクトのwebディレクトリを指定することでしょう。
例えばプロジェクトが c:\dev\myproject にあるとして、webリソースは c:\dev\myproject\web 以下にあるとします。この場合、単に c:\dev\myproject\web を指定するだけです。
例(ここでは JUnitを使っています):
内部的には、MockContainer は一つの MockContext インスタンスを生成し、 いくつかのサーブレットスタブを作成します。以下そのスタブのリストです。
MockContainer はサーブレットスタブへのアクセスのためのgetterを提供しています。setterメソッドで独自のスタブインスタンスをMockContainer にセットすることも可能です。
独自のスタブをセットした場合には、MockContainerは自分で生成したものではなく、登録されたものを利用します。
生成されたMockContainer は、start と stop メソッドでライフサイクルを管理する必要があります。
HTTP のリクエストパラメータは、MockRequest 経由でセットされます。
MockContainer は、このための便利なメソッドを用意しています。すなわち、MockContainer.setParameter と MockContainer.setParameter です。
リクエストアトリビュートをセットするために、MockContainer.setAttribute を使います。
以下の例は、一連のテストになります。
この例では、値をmyfieldフィールドにセットしています。また、Click が form を処理しないので、Form.FORM_NAMEパラメータをセットしています。Form.FORM_NAME にはフォームの名前、この例では"form"をセットしなければいけません。
Page の出力は、MockContainer.getHtml() で利用可能です。
MockContext
MockContext は、カスタムコントロール(コンポーネント)をテストするときに有用です。
MockContext を使用するときに、webディレクトリを指定することは必須ではありません。
例:
MockContext は、コンテキストを初期化するいくつかのinitContextメソッドを提供します。
- initContext()
- initContext(String servletPath)
- initContext(Locale locale)
- initContext(Locale locale, String servletPath)
- initContext(MockServletConfig servletConfig, MockRequest request, MockResponse response, ClickServlet clickServlet)
MonckContext.initContext メソッドは、いくつかのサーブレッドスタブを生成します。以下がそのスタブのリストです。
以下のサンプルコードでは、MockContext が ValidationFieldというカスタムコントロールをテストするのに使用されています。