SlideShare a Scribd company logo
SpringBootTest入門
SpringBootTest入門
SpringBootTest入門
SpringBootTest入門
SpringBootTest入門
SpringBootTest入門
SpringBootTest入門
SpringBootTest入門
SpringBootTest入門
SpringBootTest入門
SpringBootTest入門
SpringBootTest入門
SpringBootTest入門
SpringBootTest入門
SpringBootTest入門
SpringBootTest入門
SpringBootTest入門
SpringBootTest入門
SpringBootTest入門
SpringBootTest入門
SpringBootTest入門
SpringBootTest入門
SpringBootTest入門
SpringBootTest入門
SpringBootTest入門
SpringBootTest入門
SpringBootTest入門
SpringBootTest入門
SpringBootTest入門
SpringBootTest入門
SpringBootTest入門
SpringBootTest入門
SpringBootTest入門
SpringBootTest入門
SpringBootTest入門
SpringBootTest入門
SpringBootTest入門
SpringBootTest入門
SpringBootTest入門
SpringBootTest入門
SpringBootTest入門
SpringBootTest入門
SpringBootTest入門

More Related Content

What's hot (20)

PDF
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
onozaty
 
PPTX
さくっと理解するSpring bootの仕組み
Takeshi Ogawa
 
PPTX
Prometheus入門から運用まで徹底解説
貴仁 大和屋
 
PDF
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Toru Makabe
 
PDF
Swagger ではない OpenAPI Specification 3.0 による API サーバー開発
Yahoo!デベロッパーネットワーク
 
PPTX
テストコードの DRY と DAMP
Yusuke Kagata
 
PDF
マイクロサービス 4つの分割アプローチ
増田 亨
 
PDF
YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)
NTT DATA Technology & Innovation
 
PDF
Docker Compose 徹底解説
Masahito Zembutsu
 
PDF
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
Y Watanabe
 
PPTX
イベント・ソーシングを知る
Shuhei Fujita
 
PPTX
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
NTT DATA Technology & Innovation
 
PDF
DBスキーマもバージョン管理したい!
kwatch
 
PDF
Springを何となく使ってる人が抑えるべきポイント
土岐 孝平
 
PDF
Javaはどのように動くのか~スライドでわかるJVMの仕組み
Chihiro Ito
 
PDF
フロー効率性とリソース効率性について #xpjug
Itsuki Kuroda
 
PPTX
Redisの特徴と活用方法について
Yuji Otani
 
PPTX
世界一わかりやすいClean Architecture
Atsushi Nakamura
 
PDF
Unified JVM Logging
Yuji Kubota
 
PDF
Spring Bootをはじめる時にやるべき10のこと
心 谷本
 
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
onozaty
 
さくっと理解するSpring bootの仕組み
Takeshi Ogawa
 
Prometheus入門から運用まで徹底解説
貴仁 大和屋
 
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Toru Makabe
 
Swagger ではない OpenAPI Specification 3.0 による API サーバー開発
Yahoo!デベロッパーネットワーク
 
テストコードの DRY と DAMP
Yusuke Kagata
 
マイクロサービス 4つの分割アプローチ
増田 亨
 
YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)
NTT DATA Technology & Innovation
 
Docker Compose 徹底解説
Masahito Zembutsu
 
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
Y Watanabe
 
イベント・ソーシングを知る
Shuhei Fujita
 
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
NTT DATA Technology & Innovation
 
DBスキーマもバージョン管理したい!
kwatch
 
Springを何となく使ってる人が抑えるべきポイント
土岐 孝平
 
Javaはどのように動くのか~スライドでわかるJVMの仕組み
Chihiro Ito
 
フロー効率性とリソース効率性について #xpjug
Itsuki Kuroda
 
Redisの特徴と活用方法について
Yuji Otani
 
世界一わかりやすいClean Architecture
Atsushi Nakamura
 
Unified JVM Logging
Yuji Kubota
 
Spring Bootをはじめる時にやるべき10のこと
心 谷本
 

More from Yahoo!デベロッパーネットワーク (20)

PDF
ゼロから始める転移学習
Yahoo!デベロッパーネットワーク
 
PDF
継続的なモデルモニタリングを実現するKubernetes Operator
Yahoo!デベロッパーネットワーク
 
PDF
ヤフーでは開発迅速性と品質のバランスをどう取ってるか
Yahoo!デベロッパーネットワーク
 
PDF
オンプレML基盤on Kubernetes パネルディスカッション
Yahoo!デベロッパーネットワーク
 
PDF
オンプレML基盤on Kubernetes 〜Yahoo! JAPAN AIPF〜
Yahoo!デベロッパーネットワーク
 
PDF
Persistent-memory-native Database High-availability Feature
Yahoo!デベロッパーネットワーク
 
PDF
データの価値を最大化させるためのデザイン~データビジュアライゼーションの方法~ #devsumi 17-E-2
Yahoo!デベロッパーネットワーク
 
PDF
eコマースと実店舗の相互利益を目指したデザイン #yjtc
Yahoo!デベロッパーネットワーク
 
PDF
ヤフーを支えるセキュリティ ~サイバー攻撃を防ぐエンジニアの仕事とは~ #yjtc
Yahoo!デベロッパーネットワーク
 
PDF
Yahoo! JAPANのIaaSを支えるKubernetesクラスタ、アップデート自動化への挑戦 #yjtc
Yahoo!デベロッパーネットワーク
 
PDF
ビッグデータから人々のムードを捉える #yjtc
Yahoo!デベロッパーネットワーク
 
PDF
サイエンス領域におけるMLOpsの取り組み #yjtc
Yahoo!デベロッパーネットワーク
 
PDF
ヤフーのAIプラットフォーム紹介 ~AIテックカンパニーを支えるデータ基盤~ #yjtc
Yahoo!デベロッパーネットワーク
 
PDF
Yahoo! JAPAN Tech Conference 2022 Day2 Keynote #yjtc
Yahoo!デベロッパーネットワーク
 
PDF
新技術を使った次世代の商品の見せ方 ~ヤフオク!のマルチビュー機能~ #yjtc
Yahoo!デベロッパーネットワーク
 
PDF
PC版Yahoo!メールリニューアル ~サービスのUI/UX統合と改善プロセス~ #yjtc
Yahoo!デベロッパーネットワーク
 
PDF
モブデザインによる多職種チームのコミュニケーション改善 #yjtc
Yahoo!デベロッパーネットワーク
 
PDF
「新しいおうち探し」のためのAIアシスト検索 #yjtc
Yahoo!デベロッパーネットワーク
 
PDF
ユーザーの地域を考慮した検索入力補助機能の改善の試み #yjtc
Yahoo!デベロッパーネットワーク
 
ゼロから始める転移学習
Yahoo!デベロッパーネットワーク
 
継続的なモデルモニタリングを実現するKubernetes Operator
Yahoo!デベロッパーネットワーク
 
ヤフーでは開発迅速性と品質のバランスをどう取ってるか
Yahoo!デベロッパーネットワーク
 
オンプレML基盤on Kubernetes パネルディスカッション
Yahoo!デベロッパーネットワーク
 
オンプレML基盤on Kubernetes 〜Yahoo! JAPAN AIPF〜
Yahoo!デベロッパーネットワーク
 
Persistent-memory-native Database High-availability Feature
Yahoo!デベロッパーネットワーク
 
データの価値を最大化させるためのデザイン~データビジュアライゼーションの方法~ #devsumi 17-E-2
Yahoo!デベロッパーネットワーク
 
eコマースと実店舗の相互利益を目指したデザイン #yjtc
Yahoo!デベロッパーネットワーク
 
ヤフーを支えるセキュリティ ~サイバー攻撃を防ぐエンジニアの仕事とは~ #yjtc
Yahoo!デベロッパーネットワーク
 
Yahoo! JAPANのIaaSを支えるKubernetesクラスタ、アップデート自動化への挑戦 #yjtc
Yahoo!デベロッパーネットワーク
 
ビッグデータから人々のムードを捉える #yjtc
Yahoo!デベロッパーネットワーク
 
サイエンス領域におけるMLOpsの取り組み #yjtc
Yahoo!デベロッパーネットワーク
 
ヤフーのAIプラットフォーム紹介 ~AIテックカンパニーを支えるデータ基盤~ #yjtc
Yahoo!デベロッパーネットワーク
 
Yahoo! JAPAN Tech Conference 2022 Day2 Keynote #yjtc
Yahoo!デベロッパーネットワーク
 
新技術を使った次世代の商品の見せ方 ~ヤフオク!のマルチビュー機能~ #yjtc
Yahoo!デベロッパーネットワーク
 
PC版Yahoo!メールリニューアル ~サービスのUI/UX統合と改善プロセス~ #yjtc
Yahoo!デベロッパーネットワーク
 
モブデザインによる多職種チームのコミュニケーション改善 #yjtc
Yahoo!デベロッパーネットワーク
 
「新しいおうち探し」のためのAIアシスト検索 #yjtc
Yahoo!デベロッパーネットワーク
 
ユーザーの地域を考慮した検索入力補助機能の改善の試み #yjtc
Yahoo!デベロッパーネットワーク
 
Ad

Recently uploaded (10)

PDF
生成AIパネルトーク(Interop25Tokyo APPS JAPAN M1-07,M2-07 嶋ポジショントーク)
嶋 是一 (Yoshikazu SHIMA)
 
PDF
プライバシ保護のためのインターネットアーキテクチャの進化 (2025-07-11)
Jun Kurihara
 
PDF
Hyperledger Fabric公式サンプル fabric-samples徹底解説
LFDT Tokyo Meetup
 
PDF
SIG-AUDIO 2025 Vol.02 オンラインセミナー SIG-Audioプレゼン資料_オーディオプラグイン開発_塩澤達矢.pdf
IGDA Japan SIG-Audio
 
PDF
人気ブロックチェーン基盤「Hyperledger Fabric」最新版を動かしてみた!
LFDT Tokyo Meetup
 
PDF
Hyperledger Fabric最新v3.x系での機能強化、変更点にキャッチアップ!
LFDT Tokyo Meetup
 
PDF
20250630_aws_reinforce_2025_aws_sheild_network_security_director
uedayuki
 
PDF
20250710_Devinで切り拓くDB革命_〜価値創出に集中せよ〜.pdf
Masaki Yamakawa
 
PDF
ABC2025S LT講演「世界の窓から Androidこんにちは2025」アプリ自動生成の将来?ロボティクスの夢再び?
嶋 是一 (Yoshikazu SHIMA)
 
PDF
[Hardening Designers Confernece 2025]ランサムウェアでの見えざるログ・見えるログ
kataware
 
生成AIパネルトーク(Interop25Tokyo APPS JAPAN M1-07,M2-07 嶋ポジショントーク)
嶋 是一 (Yoshikazu SHIMA)
 
プライバシ保護のためのインターネットアーキテクチャの進化 (2025-07-11)
Jun Kurihara
 
Hyperledger Fabric公式サンプル fabric-samples徹底解説
LFDT Tokyo Meetup
 
SIG-AUDIO 2025 Vol.02 オンラインセミナー SIG-Audioプレゼン資料_オーディオプラグイン開発_塩澤達矢.pdf
IGDA Japan SIG-Audio
 
人気ブロックチェーン基盤「Hyperledger Fabric」最新版を動かしてみた!
LFDT Tokyo Meetup
 
Hyperledger Fabric最新v3.x系での機能強化、変更点にキャッチアップ!
LFDT Tokyo Meetup
 
20250630_aws_reinforce_2025_aws_sheild_network_security_director
uedayuki
 
20250710_Devinで切り拓くDB革命_〜価値創出に集中せよ〜.pdf
Masaki Yamakawa
 
ABC2025S LT講演「世界の窓から Androidこんにちは2025」アプリ自動生成の将来?ロボティクスの夢再び?
嶋 是一 (Yoshikazu SHIMA)
 
[Hardening Designers Confernece 2025]ランサムウェアでの見えざるログ・見えるログ
kataware
 
Ad

Editor's Notes

  • #3: 2016新卒入社でヤフーショッピングの商品プラットフォーム周りの開発・運用を行っています。 ECサイトで日本一の商品数を誇る商品データPFの管理しています。 趣味でゲームエンジンの開発や、大学時代にはインターネット決済や塾運営システムの開発を行っていました。 Javaの大規模開発経験は今までなかったので、SpringBootの勉強中です。 そこで、SpringBootTestに入門してみました!
  • #4: 今回のLTの目標は SpringBootアプリケーションでDIコンテナ管理のBeanについて簡単なテストコードの書き方を理解する としています。 SpringBootTestと書いてありますが、入門のため、SpringBootTest特有の機能の説明ではなく、 JunitとSpringTestの説明になっちゃってますが、ご了承ください。
  • #5: このセッションの目次はこの通りです (目次読む)
  • #7: ご存知だとは思いますが、再確認です。 ユニットテストとは、クラスやメソッドがプログラマの期待通りに振る舞うかを検証することです。 テストコードはクラスやメソッドの仕様書となりうるので、うまく使うと非常に強力です。
  • #9: SpringBootのプロジェクトフォルダ構造はデフォルトでtestパッケージを生成してくれているので、 そこに対象のテストクラスを配置します。
  • #10: テストの実行方法は、コマンドラインからだと./mvnw testと打てば、mavenからテスト可能です。 STSやEclipseからの場合は、プロジェクトを右クリックしてRunAsの中のJUnitTestなどを選択したりすれば実行できます。
  • #11: Eclipseで実行した例としては こんな感じです。
  • #12: Junitにおけるテストケースメソッドの例になります テストパッケージにこのようなメソッドを実装したクラスを生成すると、テスト実行時に自動でテストケースとして実行されます。 詳細としては、
  • #13: @Testアノテーションをつけることで、テストケースの1つとして認識され、実行される。
  • #14: 通常のコードで例外の基底クラスであるExceptionをthronwsに指定することはないが、 テストの場合は、複雑になるのを避けるために例外的にExceptionクラスをthrowsに指定する。
  • #15: assertThatメソッドで値が正しいか判定を行います。
  • #16: Matcherオブジェクトと呼ばれるものを生成するMatcherAPIによって述語的に計算値が正しいかどうかを判定することができます。 equalToは一例なので、他にも様々なメソッドを利用できます。
  • #17: AssertJというパッケージを利用することによって、計算値と期待値の比較をメソッドチェーンで記述できます。 メリットとしては、MatcherAPIを覚えていなくても、assertメソッドの後にドットを打てばIDE補完が効くので楽に記述できます。
  • #18: assertThatメソッドではなく、assertほにゃららメソッドはJunitの標準の機能として用意されています。 Junit4では、HamcrestというMatcherオブジェクトパッケージを標準で利用しているために先ほどの書き方になっています。 Junit5では、Matcherオブジェクトを利用するかどうかを、選択することでができるようになり、標準はこちらに戻る方針のようです。
  • #19: テスト対象のクラスの例です。 multiplyメソッドにて、引数で受け取った2つの整数の積を返します。
  • #20: multiplyメソッドのテストの例はこのようになります。 ここが、テストメソッドで、 ここが、テストクラスのインスタンスの生成。 ここで、multiplyメソッドの戻り値を計算した値としてassertionによるチェックを行う
  • #22: SpringBootTestについて、 SpringInitilizrで生成したSpringBootProjectはSpringBootアプリケーションのユニットテストに必要なパッケージは自動で入るように設定されています。
  • #23: Spring-boot-starter-testはこのようなパッケージを含んでいます。 AssertJが先ほどの、メソッドチェーンでチェックできるパッケージ Mamcrestがmatcherオブジェクトライブラリになっているので、先ほどの記法について、 SpringBootでは標準で使えるようになっています。
  • #25: 早速、BeanとなっているクラスをDIコンテナを利用せずに単体テスト行う方法についてみてみましょう。 こんな方針でいきます。
  • #26: 名前を呼んであいさつのできるメソッドを持つサービスクラスを用意します。 プロパティとして、nameとメッセージを持ち、それぞれはデフォルト値を持ちます。
  • #27: 先ほどのサービスクラスをnewでインスタンス生成して、期待値と実際の値を比較し ます。 newして、期待値を作成して、比較する形になります。
  • #28: ここで、疑問が!
  • #29: Newでインスタンス生成を行うと、DIコンテナを利用してないから、他のクラスに依存しているクラスのDIが行われないよね? クラスのプロパティにDIが必要な場合はどうするの? こんな感じでプロパティにAutowiredが指定されているクラスの単体テストの場合ですね!
  • #30: 例えば、Diコンテナのコンポーネントスキャンで自動でDIされる、NameGreetingSourceに依存している、DINameGreetingServiceというクラスがいるような場合 先ほどの2つのプロパティを構造体に分離してDIさせた場合です。
  • #31: この場合はDIコンテナを使わずにMockクラスを使ってDIしよう!
  • #32: mockito登場!!! モヒートに由来してるみたいです これは、先ほど説明したspring-boot-starter-testに標準で入っているパッケージです。
  • #33: テストクラスの上にテストランナークラスをアノテーションのオプション指定する InjectされるMockオブジェクトをInjectmocksで指定 InjectするMockオブジェクトをMockで指定
  • #34: MockitoでMockクラスとしたオブジェクトは、メソッドを実際に実行せずにメソッドの振る舞いを引数によって指定できたりします。 詳細はここでは触れませんが、Mockitチュートリアルでご確認ください。
  • #36: SpringBootのDIコンテナを利用して結合テストを行いたい場合
  • #37: BeanのConfigrationクラスを用意して、テストクラスのConfigurationに指定する必要があります。
  • #38: Configurationクラスであることをアノテーションで指定、 ComponentScan対象のパッケージをアノテーションで指定 クラスのメソッドとして、テスト用のBean定義を書くことができます。
  • #39: テストクラスの方は、 DIコンテナを利用するために、Springのテストランナークラスを指定します。 読み込むConfigurationクラスを指定します。 テストクラスにテスト対象クラスをDIして、テストを行います。
  • #40: まとめると、 DIのないBeanの単体テストはJunitの基本的な機能でできます。 DiのあるBeanの単体テストはmockitoを用いたテストでできます。 Beanの結合テストに関しては、テスト用のDIコンテナ設定クラスを読み込んでテストできます。
  • #42: そのまま読みましょう
  • #43: 参考文献はこちら