2017-03-24 14 views
0

Spring Cloud Task用の統合(つまり、Spring起動アプリケーション全体のテスト)の最善の方法についてのガイダンスを探しています。 既存のドキュメントとサンプルに基づいて、私はこのための2つのアプローチを参照:Spring Cloudタスク統合テスト

1)ここで

記載されているように(プロパティ= {「偽= spring.cloud.task.closecontext_enable」} @TestPropertySourceと標準@SpringBootTestを使用春のコンテキストがテストクラスごとに、すなわち一度初期化されたときにタスクが実行されるよう

http://docs.spring.io/spring-cloud-task/docs/1.2.0.M2/reference/htmlsingle/#_writing_your_test

これは、テストクラスごとに効果的に1つのテストのみを許可するように思える。しかし、テストクラスにコンテキスト内のBeanの @Autowiringが動作するはずです例えば、タスクの結果をチェックしたり、タスクの状態を調べたりするリポジトリ

2)SpringApplication.run(MyTaskApplication.class、myArguments)を使用します。ここで

https://github.com/spring-cloud/spring-cloud-task/blob/master/spring-cloud-task-samples/batch-job/src/test/java/io/spring/BatchJobApplicationTests.java

例のように各試験方法では、これは私は、潜在的に異なるばね特性またはバッチ・ジョブ・パラメータを使用してテストクラス毎に複数のテストを記述することを可能にします。

JdbcTemplateなどのコンテキストでBeanに@Autowireをアクセスする方法(たとえば、ジョブのテスト入力データを埋め込みDBに挿入する)やRestTemplateなどのアクセス方法がわからないという主な問題は、 (MockRestServiceServerを使用して期待値を設定する) これらのBeanが作成された後でタスクが実行される前に - これが可能ですか?そうでない場合は、タスクの意味のある統合テストを作成する方法を理解することは難しいです。アイブ氏は、今のところ何をし

答えて

0

はアプローチのバリエーションです(2)(つまり、私は複数回タスクを実行することができます/同じテストクラスで複数のテストを持っている)

の上に私は

SpringApplication application = new SpringApplication(new Object[] {MyTaskApplication.class, TestConfig.class}); 
を使用しています実際の豆オーバーライド

TestConfigテストクラスに@TestConfigurationと定義され、含まれているモック豆など

それから使用

application.addListeners() 

ContextRefreshedEventListenerを追加すると、Beanが作成されてからタスクが実行される前に、mock(またはjdbc呼び出しを実行)に期待値を設定できます。 (私は私が豆あたりラムダまたはメソッド参照として行動して通過することを可能にする一般的なリスナークラスを持っている)

その後

application.run(args); 

でタスクを実行します(別のテストで異なる引数を使用することができます)

また、テストの実行後にmocks/dbの状態を確認する場合は、アプリケーションを開いたままにする引数として"--spring.cloud.task.closecontext_enable=false"を渡すこともできます。この場合は、テストの最後に手動で閉じます。

Spring Cloud Task自体が、Beanの作成とタスクの実行の間のテスト状態の設定を可能にするための一般的なリスナーまたはフックを提供していれば、これは分かりやすいアプローチです。

関連する問題