単体テストでは、@Runwith(SpringRunner.class)
&の違いは何@SpringBootTest
ですか?
それぞれの使用例を説明していただけますか?
単体テストでは、@Runwith(SpringRunner.class)
&の違いは何@SpringBootTest
ですか?
それぞれの使用例を説明していただけますか?
回答:
@RunWith(SpringRunner.class): junitテスト中@Autowire
に@MockBean
などのようなスプリングブート機能を有効にするには、このアノテーションが必要です。
Spring Bootテスト機能とJUnit間のブリッジを提供するために使用されます。JUnitテストでSpring Bootテスト機能を使用している場合は常に、この注釈が必要になります。
@SpringBootTest:このアノテーションは、エンドツーエンドの統合テストのために完全なアプリケーションコンテキストをロードするために使用されます
@SpringBootTestアノテーションは、コンテナー全体をブートストラップする必要がある場合に使用できます。注釈は、テストで利用されるApplicationContextを作成することによって機能します。
これは、両方のシナリオの明確な例を含む記事です。
spring.ioから:
@RunWith(SpringRunner.class)
Springのテストサポートを使用して実行するようJUnitに指示します。SpringRunner
はの新しい名前ですSpringJUnit4ClassRunner
。見た目が少し簡単です。
@SpringBootTest
は、「Spring Bootのサポートを備えたブートストラップ」と言っています(たとえばapplication.properties
、すべてのSpring Bootの良さをロードしてくれます)
したがって、統合テストでSpring Bootがロードするものすべてが必要ない場合は、 @SpringBootTest
@RunWithは、テストランナーを使用するためのJUnit 4の古いアノテーションです。JUnit 5(Jupiter)を使用している場合は、@ ExtendWithを使用してJUnit拡張機能を使用する必要があります
https://docs.spring.io/spring-boot/docs/current/reference/html/spring-boot-features.html#boot-features-testingを参照して ください
「JUnit 4を使用している場合は、テストに@RunWith(SpringRunner.class)も追加することを忘れないでください。そうしないと、注釈は無視されます。JUnit5を使用している場合は、同等の@ExtendWith(を追加する必要はありません。 SpringExtension.class)として、@ SpringBootTestと他の@…Testアノテーションはすでにアノテーションが付けられています。