HTTPリクエストのテスト時に先頭の設定するリクエストハンドラ。
本クラスでは、以下の処理を行う。
テストクラスから指定されたExecutionContextを、
handleメソッドの引数のExecutionContextへ移送する。
ExecutionContext#handleNext呼び出し後のExecutionContextの情報を
テストクラスから指定されたExecutionContextへ移送する。
ハンドラキューの処理結果となるHttpResponseオブジェクトのステータスコードを
アサートできるようにスタティック変数として保持しておく。
HttpRequestTestSupport.execute(Class, String, HttpRequest, ExecutionContext)
から
nablarch.fw.web.HttpServer#handle(HttpRequest, ExecutionContext)が呼ばれるが、
ここで引数に
ExecutionContext
を渡しても使用されない。
(nablarch.fw.Handler#handle(Object, nablarch.fw.ExecutionContext)を実装する為、
引数として用意されているだけで、実際には使用しない)
実際には内蔵サーバ内で新たに生成された
ExecutionContext
が使用される。
テストクラス側で生成した
ExecutionContext
の情報を使用してテストを行う為に、
本ハンドラにて移送を行う。
また、コンテンツパスを指定してレスポンスを行った場合、
内蔵サーバからは一律ステータスコード200が返却される。
(JSP等のリソースに対するサーブレットフォーワードは全てこれに含まれる。)
このため、HttpResponseオブジェクトのステータスコードと、クライアントに対する
実際のレスポンスコードが一致しなくなるので、本ハンドラにHttpResponseオブジェクトのステータス
コードを保持しておき、後続のアサート処理で参照する。
ただし、リダイレクトの場合はServletAPI(
HttpServletResponse.sendRedirect(String)
)
を使用しているため、
HttpResponse
にはリダイレクトのステータスコードは設定されない。
(ステータスコードの設定をコンテナに任せているため)
従って、リダイレクトの場合のステータスコードは、本クラスではなく、
コンテナが返却するレスポンスから取得する必要がある。