Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Spring Boot と AWS S3 を使ったアプリケーションのテスト

Spring Boot と AWS S3 を使ったアプリケーションのテスト

Avatar for Daisuke Garaike

Daisuke Garaike

June 17, 2025
Tweet

More Decks by Daisuke Garaike

Other Decks in Programming

Transcript

  1. 目的 - モダンな Web アプリケーション で使われる S3 - そんな S3

    を使うアプリケーション のテストを書くモチベーションが 上がる 5
  2. テストは書きたい - 変更に強い - ソースコードの変更 - ライブラリアップデート - AWS SDK:

    ほぼ毎日 - 書いたコードが正確に動くこと を確信できる 7
  3. 何をテストするべきか - ソフトウェアの振る舞い - 入力 - 出力 - 保存 -

    計算 - リポジトリクラスは 3 つの 振る舞いあり - 入力・出力・保存 8
  4. S3 を使うクラスのテストの必要性は? - 堅牢なコードのほとんどはエラーハンドリング 10 public String createDownloadUrl(String bucket, String

    key) { if (bucketIsNotPresent(bucket)) throw new RuntimeException("バケットが存在しません。"); if (objectIsNotPresent(bucket, key)) throw new RuntimeException("オブジェクトが存在しません。"); return s3Presigner .presignGetObject( getObjectPresignRequest -> getObjectPresignRequest .getObjectRequest(getObjectRequest -> getObjectRequest.bucket(bucket).key(key)) .signatureDuration(Duration.ofMinutes(10)) ) .url() .toExternalForm(); }
  5. 技術的な課題 - ドメイン・リポジトリはともに アプリケーションの端 - 違い: - ドメイン: 純粋関数 -

    リポジトリ: さらに外に 外部サービス 12 Presentation UseCase DB・S3 Domain Infra
  6. テストダブル - ダミー・スタブ・スパイ・モック - インターフェースに もどづきふるまう - フェイク - 外部サービスとして

    ふるまう - テスト機構なし 13 モック スパイ スタブ ダミー フェイク テストダブル
  7. 結局、何をどうテストするのか - LocalStack を使う UT はコスパが悪い - 結合すると、データ準備の コストが増す -

    UT x Medium: 基本 - IT x Medium: ハッピーパス, etc. 18 Small Medium Large Unit Integra tion E2E
  8. 作成した API 22 - 全件検索 - 画像をダウンロードするための署名付き URL 作成 -

    保存 - 画像をアップロードするための署名付き URL 作成
  9. 感謝 34 - S3 を使用するクラスは、LocalStack を使って 自動テストが書ける - UT: Testcontainers,

    LocalStack に 切り替えられる実装 - IT: docker-compose-maven-plugin などの plugin