🧭 はじめに
Struts2 のバリデーション処理は、ユーザー入力の正当性を保つ重要な機能ですが、
そのロジックが複雑になるほど テストによる品質担保が必要不可欠です。
本記事では、以下の観点から「バリデーションの単体テスト方法」を実務ベースで解説します。
✅ 本記事で扱う内容
-
validate()メソッドのテスト方法
-
独自バリデータ(FieldValidator)の単体テスト
-
input への遷移確認やエラーメッセージ表示のテスト
-
テストパターン設計の実例
🔍 1. テストパターン設計(実務の流れ)
まず最初に行うのが、「どんな入力パターンをテストすべきか」の パターン洗い出し です。
これは、仕様書や画面設計書をもとに以下のような観点で整理します。
観点 | テスト例 |
---|---|
必須チェック | ユーザー名が空 |
桁数制限 | ユーザーIDが20文字超 |
形式指定 | パスワードが数字だけ/英字だけ |
相関チェック | パスワードと確認用パスワードが一致していない |
数値範囲 | 年齢がマイナス値 |
👀 実際のプロジェクトではこのように ExcelやPDF形式 でまとめて整理しています:
🧪 2. validate() のテスト例(JUnit)
Struts2の Action クラスで validate()
をオーバーライドしている場合、
JUnit で以下のように単体テスト可能です。
@Test
public void testValidate_emptyFields() {
LoginAction action = new LoginAction();
action.setUserId("");
action.setPassword("");
action.validate();
assertTrue(action.hasFieldErrors());
assertEquals(2, action.getFieldErrors().size());
assertTrue(action.getFieldErrors().get("userId").contains("ユーザーIDは必須です"));
}
-
hasFieldErrors()
でエラー発生の有無を確認 -
getFieldErrors().get("フィールド名")
で具体的なエラーメッセージ確認
🧩 3. 独自バリデータ(Custom Validator)のテスト例
FieldValidatorSupport
を継承したクラスも、テスト可能です。
@Test
public void testCustomValidator() throws ValidationException {
MyCustomValidator validator = new MyCustomValidator();
validator.setFieldName("userId");
validator.setDefaultMessage("不正な形式です");
ValidatorContextMock context = new ValidatorContextMock();
validator.setValidatorContext(context);
// 無効な値
validator.validate("abc!!");
assertTrue(context.hasFieldErrors());
}
🛠 MockContext を使うことで、validate()
単体をテストできます。
🔁 4. input 遷移の検証(ActionProxy 利用)
Struts2 本体の挙動(inputへの遷移や結果判定)も以下のように確認できます。
@Test
public void testLoginAction_inputTransition() throws Exception {
ActionProxy proxy = getActionProxy("/login");
LoginAction action = (LoginAction) proxy.getAction();
action.setUserId(""); // エラー条件
action.setPassword("test");
String result = proxy.execute();
assertEquals("input", result); // inputに遷移すること
assertTrue(action.hasFieldErrors());
}
✔ ActionProxy
で実行すると、Struts2の結果遷移も含めてテストできます。
🧱 5. テスト設計のベストプラクティス
複数画面やフォームを扱う場合、テスト構成を以下のように整理しておくと便利です。
src/test/java/
└── validation/
├── BaseValidationTest.java
├── LoginValidationTest.java
├── UserFormValidationTest.java
└── CustomValidatorTest.java
✅ まとめ
観点 | 内容 |
---|---|
テストパターン設計 | 観点を洗い出し、仕様に沿ったテストケースを作成 |
validate() のテスト |
hasFieldErrors() で結果を確認 |
独自バリデータの検証 | 単体で validate() を呼び出してテスト可能 |
input 遷移の確認 |
ActionProxy を使って実際の画面遷移結果を検証 |
Struts2 のバリデーション処理は非常に柔軟である一方、
その動作確認を パターンごとに丁寧にテスト
することで、
品質と保守性が格段に向上します。
🧭 次回予告:Vol.9.10
次回は、画面側のUX向上編!
-
<s:fielderror>
の高度な使い方 -
エラー時の入力欄装飾(赤枠表示、ツールチップ)
-
JavaScriptと連携したリアルタイムバリデーション
バリデーションの「見せ方」 を工夫して、より使いやすいUIを実現していきましょう!