Open1

`@SpringBootTest`って何をしてるの?

ふじしろふじしろ

公式

https://spring.pleiades.io/spring-boot/docs/current/api/org/springframework/boot/test/context/SpringBootTest.html

Spring Boot ベースのテストを実行するテストクラスで指定できるアノテーション。通常の Spring TestContext フレームワークに加えて、次の機能を提供します。

  • 特定の @ContextConfiguration(loader=...) が定義されていない場合、SpringBootContextLoader をデフォルトの ContextLoader として使用します。
  • ネストされた @Configuration が使用されておらず、明示的な classes が指定されていない場合、 @SpringBootConfiguration を自動的に検索します。
  • properties attribute を使用して、カスタム Environment プロパティを定義できます。
  • args attribute を使用してアプリケーション引数を定義できます。
  • defined または random ポートでリッスンしている完全に実行されている Web サーバーを開始する機能を含む、さまざまな webEnvironment モードのサポートを提供します。
  • 完全に実行されている Web サーバーを使用している Web テストで使用するために、TestRestTemplate および / または WebTestClient Bean を登録します。

わかりやすい記事

https://zenn.dev/msksgm/articles/20221118-kotlin-spring-boot-test-with-injection

@SpringBootTestは、名前の通りテスト環境でも Spring Framework の機能を使うためのアノテーションです。
プロダクト環境では DI コンテナによって、アノテーションによって結び付けられたクラスを DI することで、インスタンス化されます。
通常のテストでは DI コンテナが動作しないため、自動でインスタンス化されません。
アノテーションを使ったオブジェクトを呼び出さないユニットテストや DB テストでは問題ありませんが、必要なときもあります。
@SpringBootTestはそのような場合に用います。