ブログの実装例を追試するための、独立した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-service | FormからCommandへ渡す値、形式チェックとメール重複の業務判断、HTMLの項目エラーとJSONの409、保存処理の呼出有無。 | FormとDTOを分ける判断 ControllerとServiceの分担 |
03-thymeleaf-redisplay | 異常POST後の入力値・選択肢・選択値・エラー文、正常時の遷移、BindingResultの引数位置。 | 入力エラー後に値が消える |
04-mockmvc-security | Securityフィルター有効時のCSRF・認証・権限、FormとJSON、200/302/400/401/403/415とService到達の関係。 | MockMvcのPOSTが403・400になる |
src/test/java/ のテストを開き、送信値と期待結果を読む。mvn test が成功することを確認する。MockMvcとJUnitを中心にした検証です。実ブラウザーの操作、JavaScript、実ネットワーク経由の通信、外部DB・本番データ、同時実行の競合、負荷、アプリ全体のセキュリティ監査は対象外です。特にServiceの重複チェック例は、mockのRepositoryへの保存処理の呼出を確認するもので、本番DBへの永続化、競合や一意制約まで保証しません。
4番の認証済みリクエストは、テスト用の user() で利用者と権限を用意しています。実際のログイン処理やパスワード照合は検証していません。
3番のサンプルはテスト結果のHTMLを target/evidence/ に出力します。元の記事制作時の出力先から、この教材フォルダーの内側へ変更しています。アプリ本体の処理は変えていません。テスト専用のMockito設定は、この教材で必要なモックに絞ったもので、あらゆるfinalクラス等のモックを保証する設定ではありません。
教材のコードをそのまま本番の認証・データ保存の完成形として利用しないでください。ローカルでテストを実行する前提で、サーバーを外部公開する手順は含めていません。認証情報や社内データをサンプルへ書き込んで公開しないでください。
SHA256SUMS.txt には配布時のファイルのハッシュ値があります。依存ライブラリのバイナリ、実行済みのtargetフォルダー、社内資料は同梱していません。