2016-12-07 12 views
0

私はスプリングバッチステップをテストしようとしています。私が実行するとスプリングバッチ:テストステップスコープ付きステップ

@RunWith(SpringJUnit4ClassRunner.class) 
@TestExecutionListeners({DependencyInjectionTestExecutionListener.class, StepScopeTestExecutionListener.class}) 
@ContextConfiguration(loader = SpringApplicationContextLoader.class, classes = ItemReturnsApplication.class) 

This is how my test class looks like 

@Bean 
    JobLauncherTestUtils jobLauncherTestUtils(){ 
     return new JobLauncherTestUtils(); 
    } 

    @Autowired 
    private JobLauncherTestUtils jobLauncherTestUtils; 

@Test 
    public void testLaunchJob() throws Exception{ 
     JobExecution jobExecution = jobLauncherTestUtils.launchJob(
       new JobParametersBuilder().addString("chunkSize", "3").addString("current_date","2016-11-25").toJobParameters() 
     ); 
     commonAssertions(jobLauncherTestUtils.launchJob()); 
     assertEquals(BatchStatus.COMPLETED, jobExecution.getStatus()); 
    } 

を次のようにIは

私のテストクラスが注釈されているタスクレットと 1ステップ(ステップスコープ)ItemReader/ItemWriter(ステップスコープ)と 2.ステップをテストするために、2つのシナリオを持っていますテストケースでは、ジョブパラメータが自分のジョブに渡されないため、プロセスは失敗します。

私は春のバッチでステップスコープのステップをテストする正しい方法を探しています。

おかげで、 オープンソースエクスプローラ

答えて

0

は、あなたの現在のコードは、ジョブではなくステップを起動し、テストしようとします。個々のステップをテストする方法のスプリングバッチdocumentationによれば、タスクレットをテストし、タスクレットにコンテキストを注入する方法の簡単な例は、以下のコードに沿って複数ある:

@ContextConfiguration 
@TestExecutionListeners({ DependencyInjectionTestExecutionListener.class, 
    StepScopeTestExecutionListener.class }) 
@RunWith(SpringJUnit4ClassRunner.class) 
public class StepScopeTestExecutionListenerIntegrationTests { 

    // This component is defined step-scoped, so it cannot be injected unless 
    // a step is active... 
    @Autowired 
    private YourTaskletClass yourTaskletClass; 

    public StepExecution getStepExection() { 
     StepExecution execution = MetaDataInstanceFactory.createStepExecution(); 
     execution.getExecutionContext().putString("input.data", "foo,bar,spam"); 
     return execution; 
    } 

    @Test 
    public void testYourTaskletClass() { 
     // The tasklet is initialized and some configuration is already set by the MetaDatAInstanceFactory   
     assertNotNull(yourTaskletClass.doSomething()); 
    } 

} 

@RunWith(SpringJUnit4ClassRunner.class)注釈にのみ可能です1.4以上のスプリングブートバージョンが付いています。詳細はthisブログを参照してください。あなたのコードを調整してみてください、個々のステップを起動するには

@RunWith(SpringJUnit4ClassRunner.class) 
@TestExecutionListeners({DependencyInjectionTestExecutionListener.class, StepScopeTestExecutionListener.class}) 
@ContextConfiguration(loader = SpringApplicationContextLoader.class, classes = ItemReturnsApplication.class)  
public class StepIntegrationTest { 

    @Autowired 
    private JobLauncherTestUtils jobLauncherTestUtils; 

    @Test 
    public void testLaunchJob() throws Exception{ 
     JobExecution jobExecution = jobLauncherTestUtils.launchStep("nameOfYourStep"); 

    } 
} 
+0

こんにちはサンダー、私は1.4.1に私の春ブートを更新し、あなたによって示唆されているようにテストケースを調整しました。私はジョブパラメータを必要としないステップを実行しようとしました。つまり、ジョブ全体が開始され、ジョブパラメータが検索され、ジョブパラメータが検索されます。 。 –

関連する問題