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