タスク管理 REST API「TaskMaster API」を題材に、Spring Boot 4.0 / Java 25 / JUnit 6 環境でのテスト設計パターンを一通り詰め込んだ学習用サンプルです。スライステストからセキュリティテスト、ミューテーションテスト、CI/CD まで、エンタープライズ品質のテスト戦略を 1 つのプロジェクトで確認できます。
連載記事「Spring Boot TDD入門」(全13回)の伴走コードです。各記事へのリンクは末尾の連載記事を参照してください。
このリポジトリは
mvn clean verifyが完全に通る状態(Surefire + Failsafe 全 green / JaCoCo カバレッジ閾値クリア)で公開しています。
| ツール | バージョン | 用途 |
|---|---|---|
| JDK | 25 | ビルド・実行 |
| Docker | 稼働していること | 統合テストの Testcontainers が実 PostgreSQL を起動します |
| Maven | 同梱の ./mvnw を使えば別途インストール不要 |
— |
Docker が動いていないと、Testcontainers を使う統合テスト(*IT)は失敗します。単体テストだけを動かしたい場合は後述の「単体テストのみ」を参照してください。
# 単体テスト(*Test)+ 統合テスト(*IT)+ カバレッジ検証まで一気に
./mvnw clean verify
# 単体テストのみ(Docker 不要・高速)
./mvnw test
# 統合テストをスキップせず、単体テストだけスキップしたい場合
./mvnw verify -DskipUnitTests=true| 命名 | プラグイン | 中身 |
|---|---|---|
*Test |
Surefire(test フェーズ) |
単体テスト・スライステスト。多くは Docker 不要 |
*IT |
Failsafe(verify フェーズ) |
統合・E2E テスト。Testcontainers で実 PostgreSQL を使う |
テストは Testcontainers で完結しますが、アプリそのものを動かしたい場合は local プロファイルと同梱の docker-compose.yml を使います。
docker compose up -d # PostgreSQL を起動
./mvnw spring-boot:run -Dspring-boot.run.profiles=local # local プロファイルで起動デモ用の固定ユーザーは
user/admin(いずれもパスワードpassword)です。学習用の値なので本番では絶対に使わないでください。
各テスト技法が「どのファイルで」「何を」検証しているかの地図です。
| テーマ | 主なファイル | 連載記事 |
|---|---|---|
| プロジェクト初期構築・スモークテスト | TaskmasterApplicationTests |
001 テスト戦略設計 |
@WebMvcTest(Controller 層スライス) |
controller/TaskControllerTest |
002 @WebMvcTest |
@DataJpaTest(Repository 層スライス) |
repository/TaskRepositoryTest / TaskRepositoryH2Test |
003 @DataJpaTest |
| Bean Validation・カスタムバリデータ | dto/TaskCreateRequestValidationTest / validator/ |
004 バリデーション |
例外ハンドリング(@RestControllerAdvice / ProblemDetail) |
exception/GlobalExceptionHandlerTest |
005 例外ハンドリング |
@SpringBootTest 統合テスト |
controller/TaskIT |
006 統合テスト |
| REST Assured による E2E(BDD スタイル) | controller/TaskE2EIT |
007 REST Assured E2E |
Spring Security テスト(@WithMockUser / ロール別認可) |
controller/TaskSecurityTest / config/SecurityConfig |
008 セキュリティテスト |
| WireMock による外部 API スタブ | client/NotificationWireMockIT |
009 WireMock |
| テスト設定・プロファイル・Testcontainers 構成 | config/TestContainersConfig / config/TestContainersConfigIT |
010 テスト設定とプロファイル |
| ArchUnit(レイヤー依存の自動テスト) | architecture/ArchitectureTest |
011 ArchUnit |
| PITest(ミューテーションテスト) | mutation/TaskServiceMutationTest |
012 PITest |
| Surefire/Failsafe 分離・JaCoCo・CI/CD | pom.xml / .github/workflows/ci.yml |
013 TDD総まとめ |
ミューテーションテストを試すには次を実行します(実行には時間がかかります)。
./mvnw test org.pitest:pitest-maven:mutationCoveragesrc/main/java/com/example/taskmaster/
├── controller/ REST エンドポイント
├── service/ ビジネスロジック
├── repository/ Spring Data JPA リポジトリ
├── client/ 外部通知 API クライアント(RestClient)
├── config/ セキュリティ・テスト設定
├── dto/ リクエスト/レスポンス record
├── entity/ JPA エンティティ・enum
├── exception/ 例外と GlobalExceptionHandler
└── validator/ クロスフィールドのカスタムバリデータ
「Spring Boot TDD入門」全13回(visionnurture.com):
- テスト戦略設計とプロジェクト初期構築
- @WebMvcTestでController層テスト
- @DataJpaTestでRepository層テスト
- Bean Validationテスト
- 例外ハンドリング
- @SpringBootTest統合テスト
- REST Assured E2Eテスト
- Securityテスト
- WireMockテスト
- テスト設定とプロファイル
- ArchUnitで守る設計
- PITestミューテーションテスト
- TDD総まとめとCI/CD構築
MIT License で公開しています。詳細は LICENSE を参照してください。学習用サンプルとして自由に参照・改変してかまいません。