SpringBoot統合テストにおける@ContextConfigurationと@SpringApplicationConfigurationの違い



Difference Between Contextconfiguration



同時に使用する場合でも@ContextConfiguration with @SpringApplicationConfigurationコメントとSpringJUnit4ClassRunner Springアプリケーションコンテキストのロード方法を指定するために、それらの間にも微妙な違いがあります。 @ContextConfigurationアプリケーションコンテキストの読み込みに優れているが、十分に活用されていないにもかかわらず SpringBootの特徴 Spring Bootアプリケーションは、最終的にSpringApplication(JARの場合)またはSpringBootServletInitializer loadで構成されます。 このクラスは、アプリケーションコンテキストをロードするだけでなく、application.propertiesまたはapplication.ymlファイルで指定された外部プロパティ、およびSpringBootフレームワークによってロードまたは有効化されないその他の関数の記録とロードも可能にします。
@ContextConfiguration注釈。
つまり、@SpringApplicatoinConfigurationの代わりに@ContextConfiguration Commentを使用して、Webページやフロントエンドアプリケーションのテストを含む、SpringBootアプリケーションの統合テストを作成することをお勧めします。

今、あなたはあなたが書いていることを知っています 春のブートテスト 時間@ContextConfiguration with @SpringApplicationConfigurationアノテーション間の本質的な違いは、いくつかのコード例の詳細を理解しましょう。



Spring2.5の導入以来SpringJUnit4ClassRunner Spring Frameworkは統合テストの作成に優れたサポートを提供しているため、SpringBootアプリケーションを使用したテストについても同じことが言えます。 統合テスト中に、Beanをロードして依存関係に接続する必要もあります。

もちろん、これは手動で行うこともできますが、Springに処理させる方がよいでしょう。 また、コンポーネントスキャン、自動アセンブリ、ステートメントトランザクション管理、セキュリティ、キャッシングなどのすぐに使用できる機能も提供します。これらは、より本番環境に似た環境でのテストに非常に便利です。



Spring root @xxxxxの例

これは単純なSpring統合テストであり、SpringJUnit4ClassRunner with @ContextConfigurationアノテーションが含まれています。これは、アプリケーションコンテキストをロードするために使用されます。 基本的なSpringBootアノテーション 1:

@RunWith (SpringJUnit4ClassRunner. class ) @ContextConfiguration (classes=BookConfiguration. class ) public class BookServiceTest { @Autowired private BookService bookService @Test public void testBookService() { Book aBook = bookService.findByTitle( 'Spring Boot in Action' ) assertEquals( 'Craig Walls' , aBook.getAuthor()) assertEquals( 40 , aBook.getPrice()) } }

ご覧のとおり、BookServiceTestクラスは@RunWithを使用します JUnitアノテーション @ContextConfigurationアノテーションでアノテーションを付けます。

@RunWith Spring統合テストを有効にするにはアノテーションが必要です。これが、私たちがSpringJUnit4ClassRunnner転送SpringJUnit4ClassRunnnerクラスの理由であり、@ContextConfigurationアノテーションはアプリケーションコンテキストのロード方法を指定します。



この例では、クラスで定義されたSpringアプリケーションコンテキストをロードしますBookConfiguration

SpringJUnit4ClassRunner強力なクラスであり、アプリケーションコンテキストをロードできるだけでなく、Beanをテストに自動的にアセンブルすることもできます。

たとえば、このテストクラスでは、そのfindByTitle()メソッドをテストするためにBookServiceが必要であり、BeanはSpringJUnit4ClassRunnerで構成されているため、クラスは自動的に挿入されるため、コードを記述するだけで済みます。
testBookService()メソッド。

画像

さて、@ContextConfigurationに戻りますアプリケーションコンテキストのロードには役立ちますが、 ロギングを有効にしませんまたは application.propertiesから 他の属性をロードする たとえば、server.portプロパティは、Springの起動中に組み込みのTomcatサーバーのポートを変更するために必要なアプリケーションです。

この問題を解決するには、代わりに@SpringApplicaitonCongifguation注釈@ContextConfigurationを使用できます。 、次のように:

@RunWith (SpringJUnit4ClassRunner. class ) @SpringApplicaitonCongifguation (classes=BookConfiguration. class ) public class BookServiceTest { @Autowired private BookService bookService @Test public void testBookService() { Book aBook = bookService.findByTitle( 'Cloud Native Java' ) assertEquals( 'Josh Long' , aBook.getAuthor()) assertEquals( 40 , aBook.getPrice()) } }

この動作は前の例と同じですが、@SpringApplicationConfiguration Spring Bootログを有効にし、application.propertiesまたはapplication.ymlファイルで定義されている他のプロパティをロードします。

これは Spring Boot @ContextConfiguration with @SpringApplicationConfigurationコメントの違い SpringJUnit4ClassRunnerを一緒に使用してアプリケーションコンテキストをロードするのに役立ちますが、ロギングやその他のSpring Boot機能も有効にするため、それ以降のバージョンは引き続き役立ちます。

SpringBootアプリケーションの統合テストを作成するときに使用するのが最適です@SpringApplicationConfigurationテストを本番環境にできるだけ近づけるため。

これまでこの記事を読んでいただきありがとうございます。 私が好きなら@SpringApplicationConfiguration with @ContextConfigurationコメントの説明を友達や同僚と共有してください。 ご質問やご意見がございましたら、メッセージを残してください。

翻訳元: https://www.javacodegeeks.com/2019/02/difference-spring-boot-integration-test.html