仮に CartHtml のコーディングは済んでいるが、ShopHtml が終わっていない、としましょう。 今から CartHtml の動作確認を行いたいと考えています。 全てのページにスケルトンソースがあるので、他のページが未完成でもブラウザ上で容易にテストが可能ですが、今回はセッションを使用しており ShopHtml が無ければカートが発生しません。
Paraselene では、単体テストを行うための paraselene.test パッケージがあり、テスト用の RequestParameter(TestRequestクラス) と HttpSession(TestSessionクラス) を準備しています。 これらを使うと、サーブレットコンテナ無しで動作を再現する事ができます。
まず最初に、Paraselene の動作概要です。Paraselene は以下の事を行っています。
Gateクラスの startup が実行されます。以下のメソッドを実行しています。
ページIDの生成と、ページファクトリーにページ生成のためのエントリーを行い、バックグラウンドでページインスタンス生成が開始されます。
各ページの動作検証は、inputMain の動作が正しいか?と outputMain の動作が正しいか?の2点です。 内部処理の条件分岐に合わせ、入力データを準備する事になります。
例えば、ShopHtml の初期表示(ブラウザで初めてサイトを開いた状態)は以下のようなコードで再現できます。
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23:
import paraselene.*; import paraselene.supervisor.*; import paraselene.test.*; import test.*; import test.base.*; public class UnitTest { public static void main( String[] argc ) throws Exception { Gate.startup(); Page page = PageLoader.getPageFactory().getPage( PageType.SHOP_HTML ); TestRequest req = new TestRequest( RequestParameter.Method.GET, // リクエスト時のメソッド null, // セッション null, // クッキー null, // クライアントのIPアドレス null, // リクエスト時のURI new Gate() ); page = page.output( null, req ); System.out.println( page.toString() ); } }
TestRequest の各引数はページの実処理で参照していなければ null で構いません。 これの実行結果(画面エコー)が以下です。 <FORM>の action が正しいURLではありませんが(<A>の href 等も同様の表示になります)、テスト時には気にする必要はありません。
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44:
<html> <head> <meta content="text/css" http-equiv="Content-Style-Type"> <title>商品</title></head> <body> <form action="PARASELENE(PAGE)399851037" method="post"> <input name="paraselene$form" value="e" type="hidden"> <table name="list"> <tr> <td>A4ノート</td> <td> </td> <td align="right">189円</td> <td> </td> <td>数量 <input name="count" value type="text" size="3"></td> <td> <input name="buy" value="カートに入れる" type="submit"></td></tr> <tr> <td>ボールペン</td> <td> </td> <td align="right">99円</td> <td> </td> <td>数量 <input name="count$0" value type="text" size="3"></td> <td> <input name="buy$0" value="カートに入れる" type="submit"></td></tr> <tr> <td>セロハンテープ</td> <td> </td> <td align="right">45円</td> <td> </td> <td>数量 <input name="count$1" value type="text" size="3"></td> <td> <input name="buy$1" value="カートに入れる" type="submit"></td></tr> <tr> <td>A4コピー用紙 500枚</td> <td> </td> <td align="right">298円</td> <td> </td> <td>数量 <input name="count$2" value type="text" size="3"></td> <td> <input name="buy$2" value="カートに入れる" type="submit"></td></tr></table></form></body></html>