Skip to content

VisionNurture-com/taskmaster-api-sample

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

TaskMaster API — Spring Boot 4 + TDD サンプル

タスク管理 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:mutationCoverage

プロジェクト構成

src/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):

  1. テスト戦略設計とプロジェクト初期構築
  2. @WebMvcTestでController層テスト
  3. @DataJpaTestでRepository層テスト
  4. Bean Validationテスト
  5. 例外ハンドリング
  6. @SpringBootTest統合テスト
  7. REST Assured E2Eテスト
  8. Securityテスト
  9. WireMockテスト
  10. テスト設定とプロファイル
  11. ArchUnitで守る設計
  12. PITestミューテーションテスト
  13. TDD総まとめとCI/CD構築

ライセンス

MIT License で公開しています。詳細は LICENSE を参照してください。学習用サンプルとして自由に参照・改変してかまいません。

About

Spring Boot 4 + TDD learning sample (TaskMaster API) — companion code for a 13-part series

Resources

License

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages