HttpUnitでファイルアップロードのテスト
現在のプロジェクトでユニットテストを徐々に導入中。今まで社内にはちゃんとしたテストの手順とか無かったんだけど、プロジェクトも徐々に大きくなってきたのと、時間的に若干余裕が出てきたので色々整備中。
さて、通常のJavaクラスはJUnitでテストすればいいけど、サーブレットとかは?って事で、HttpUnitを使う事にした。Cactusも検討したけど。
とりあえずチュートリアルとか見て普通のテストは書けるようになったんだけど、ファイルアップロードを扱うサーブレットのテストでちょっとハマった。
まず1点目。
PostMethodWebRequestのselectFileメソッドでエミュレートできるみたいなんだけど、IllegalNonFileParameterExceptionが発生する。
解決方法はPostMethodWebRequestを生成する際に以下のコンストラクタを使用して第二引数をtrueにする。
2点目。よくあるケースとしてファイルアップロード用のボックスがあって、その項目が必須じゃない場合があると思う。Yahooメールの添付ファイルのページとか、ボックスが5個有るけど、別に必ず5個同時にファイルアップロードする必要はない(当然)。
例えば、以下のファイル入力用のボックスがあって、ファイル名を指定しない場合のテストをしたい。
<input type=”file” name=”file1″ />
以下はどれも例外が発生してNG
webRequest.selectFile(“file1”, new File(“”));
selectFileを呼ばないと、それは上記フォームがページ上に存在しない状態をエミュレートしている事になり、やりたいテストとは違う。結局MLで解決方法を見つけた(ページ末尾のコード参照)。