ポンコツPdMの開発メモ / 教材用サンプル

Springフォーム・入力検証を、
テストを動かして確かめる

ブログの実装例を追試するための、独立した4つのMavenプロジェクトです。入力の形式、画面への再表示、Serviceの判断、Securityによる拒否を分けて確認します。実在の顧客・社内コード・データは含みません。

最初からすべて読む必要はありません。対象の記事に対応するフォルダーを選び、まずテストを通し、入力値や期待値を一つ変えて挙動を確かめてください。4つを1つのアプリとして起動する構成ではありません。

必要なもの・実行方法

解凍したフォルダーから、対象のプロジェクトへ移動して実行します。

cd 01-validation-basics
mvn test

結果は各フォルダーの target/surefire-reports/ に作られます。依存関係を取得済みなら mvn -o test でオフライン実行できます。Javaの版やネットワークの失敗と、テストの期待値不一致を分けて確認してください。

何を確かめるサンプルか

フォルダー確かめる内容対応する記事
01-validation-basics検証グループ、メッセージの表示、入力の型変換・必須値・JSONと400応答。@Validと@Validated
メッセージが表示されない
400の原因
02-controller-serviceFormからCommandへ渡す値、形式チェックとメール重複の業務判断、HTMLの項目エラーとJSONの409、保存処理の呼出有無。FormとDTOを分ける判断
ControllerとServiceの分担
03-thymeleaf-redisplay異常POST後の入力値・選択肢・選択値・エラー文、正常時の遷移、BindingResultの引数位置。入力エラー後に値が消える
04-mockmvc-securitySecurityフィルター有効時のCSRF・認証・権限、FormとJSON、200/302/400/401/403/415とService到達の関係。MockMvcのPOSTが403・400になる

おすすめの試し方

  1. src/test/java/ のテストを開き、送信値と期待結果を読む。
  2. 変更前の mvn test が成功することを確認する。
  3. 例として正常な数値を文字列に変える、必要な入力を除くなど、一条件だけ変える。
  4. HTTP応答だけでなく、項目エラー、再表示HTML、Serviceや保存処理の呼出有無を確認する。
  5. 何が保証でき、何を別のテストで確認する必要があるかを短く説明する。

この教材で検証していないこと

MockMvcとJUnitを中心にした検証です。実ブラウザーの操作、JavaScript、実ネットワーク経由の通信、外部DB・本番データ、同時実行の競合、負荷、アプリ全体のセキュリティ監査は対象外です。特にServiceの重複チェック例は、mockのRepositoryへの保存処理の呼出を確認するもので、本番DBへの永続化、競合や一意制約まで保証しません。

4番の認証済みリクエストは、テスト用の user() で利用者と権限を用意しています。実際のログイン処理やパスワード照合は検証していません。

3番のサンプルはテスト結果のHTMLを target/evidence/ に出力します。元の記事制作時の出力先から、この教材フォルダーの内側へ変更しています。アプリ本体の処理は変えていません。テスト専用のMockito設定は、この教材で必要なモックに絞ったもので、あらゆるfinalクラス等のモックを保証する設定ではありません。

安全な利用のために

教材のコードをそのまま本番の認証・データ保存の完成形として利用しないでください。ローカルでテストを実行する前提で、サーバーを外部公開する手順は含めていません。認証情報や社内データをサンプルへ書き込んで公開しないでください。

SHA256SUMS.txt には配布時のファイルのハッシュ値があります。依存ライブラリのバイナリ、実行済みのtargetフォルダー、社内資料は同梱していません。