2016-12-07 7 views
0

Я пытаюсь проверить шаги партии Spring. У меня есть 2 сценариев для тестирования 1. Шаг с тасклет (этап область действия) 2. Шаг с ItemReader/ItemWriter (шаг области видимости)Spring-Batch: шаг тестирования Шаг с шагом

Мой тестовый класс помечается следующим

@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()); 
    } 

Когда я бегу тестовый случай, процесс выходит из строя, потому что параметры задания не попадают в мою работу.

Я ищу правильный способ тестирования ступенчатых шагов в весенней партии.

Спасибо, Opensource Проводник

ответ

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

Привет Sander, я обновил свой пружинный загрузку 1.4.1 и отрегулировать случай испытания, как предложено вам. Я попытался выполнить шаг, который не требует параметров работы, наблюдения, запускается все задание и ищет параметры работы и не удается в точке, где задание ищет параметры работы .... Является ли это ожидаемым поведением ... , –

Смежные вопросы