Шаговое тестирование в Spring Batch - PullRequest
0 голосов
/ 26 декабря 2018

во время тестирования шага, который представляет собой чан-ориентированную обработку, которая содержит программу чтения и записи с использованием jobLauncherTestUtils.launchstep ().

1.Как передать или установить проводник заданий при тестировании как единый шаг?

Шаг:

    @Bean(name="step_name")
    public step step1(RepositoryItemReader<Person> perosnItemReader,
        FlatFileItemWriter<String> personItemWriter,
        TaskExecutor personTaskExecutor){
      return StepBuilderFactory
          .get("step_name")
          .listener(new listener())
          .<Person,String>Chunk(200)
          .reader(personItemReader)
          .writer(personItemWriter)
          .listener(new DateReadListener())
          .build();
    }

Считыватель :

@Bean(name="step_reader")
public RepositoryItemReader<Person> personItemReader(
    @Value("#jobParameters[id]}" String id){
  return new RepositoryItemReader<Person>()
        .name("step_reader")
        .repository(personDao)
        .methodName("getDetails")
        .arguments(id)
        .build();
}

Writer :

@Bean(name="step_writer")
public FlatFileItemWriter<String> personItemWriter(
    @Value("#{jobExecutionContext[person]}") Person person,
    @Value("#{stepExecution.jobExecution.id}" long id,
    JobExplorer jobExplorer) {

    Foo foo = new 
    Foo(jobExplorer.getJobExecution(jobId).getExecutionContext(),new 
    CurrentDate());
    return new FlatFileItemWriterBuilder()
        .get("item_writer")
        .callback(foo)
        .build();
  }

Способ, которым я это проверил.

ExecutionContext executionContext = new ExecutionContext()
executionContext.put("person",Person);  
JobExecution jobExecution =              
    JobLauncherTestUtils.launchStep("step_name",jobparams,executionContext);

Issue

class Foo{
   Foo f = new Foo(JobExecution jobExection, Date date);
   Person person = (Person)jobExecution.getExecutionContext().get("person");
}

Здесь jobExecution возвращает null значение.

ThanksInAdavnce

1 Ответ

0 голосов
/ 29 декабря 2018

Как проверить, успешно ли считыватель возвращает данные?

Вам не нужно тестировать весь шаг, чтобы проверить, правильно ли считыватель возвращает данные.Одного модульного теста самого считывателя должно быть достаточно: создайте и откройте считыватель, вызовите read и подтвердите результат.

2. Как передать идентификатор выполнения задания и проводник задания в средство записи, котороепринимает оба значения в качестве параметров?

Зачем автору элемента требуется выполнение задания и проводник задания?Из вашего кода они не используются при создании писателя.

...