Я пытаюсь создать тестовый пример Junit для тестирования отдельного шага моего пакетного задания, которое, в свою очередь, имеет пользовательский JdbcCursorItemReader
и записывает данные в плоский файл.Я не могу смоделировать данные, которые могут быть введены в процессор для записи в плоский файл.Пожалуйста, помогите.
Я следовал шагам по ссылке ниже, чтобы создать тестовый пример для запуска отдельного шага:
https://docs.spring.io/spring-batch/trunk/reference/html/testing.html
Поскольку мой компонент считывателя - это приставка, я используюконтекст вокруг раздела 10.4 в приведенной выше ссылке позволяет поместить необходимые доменные объекты в ExecutionContext
, но при запуске шага он не распознает то же самое, а выполняет фактический запрос SQL, который я внедряю через config xml.
Моя конфигурация xml имеет следующий шаг:
<step id="sample-step" next="next-step">
<tasklet>
<chunk reader="customJDBCReader" processor="customProcessor"
writer="customFlatFileItemWriter" commit-interval="XXX" />
</tasklet>
</step>
Мой customreader реализует JdbcCursorItemReader
, для которого определен SQL для чтения информации из базы данных.
Во время моего модульного тестирования я пытаюсь смоделироватьданные вместо зависимости от фактических данных из базы данных
private StepExecution execution;
@BeforeStep
public StepExecution getStepExection() {
execution = MetaDataInstanceFactory.createStepExecution();
return execution;
}
@Test
public void testSampleStep() throws UnexpectedInputException, ParseException, Exception {
MyDomainObject domainObject= new MyDomainObject ();
domainObject.setID("sampleID");
domainObject.setName("sampleName");
domainObject.setImage("sampleImage");
execution.getExecutionContext().put("someKey", domainObject);
execution.setReadCount(1);
JobExecution jobExecution = jobLauncherTestUtils.launchStep("sample-step", jobParameters, execution.getExecutionContext());
AssertFile.assertFileEquals(new FileSystemResource(EXPECTED_FILE), new FileSystemResource(OUTPUT_FILE));
}
Ожидаемый результат должен состоять в том, что на этапе запуска необходимо получить данные из executionContext
вместо базы данных, чтобы записать их в faltfile.