У меня читатель настроен, как показано ниже:Спринг Пакетное: тестовый модуль позднего связывания
<bean name="reader" class="...Reader" scope="step">
<property name="from" value="#{jobParameters[from]}" />
<property name="to" value="#{jobParameters[to]}" />
<property name="pageSize" value="5"/>
<property name="saveState" value="false" /> <!-- we use a database flag to indicate processed records -->
</bean>
и испытание для него, как это:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({"classpath:testApplicationContext.xml"})
@ActiveProfiles({"default","mock"})
@TestExecutionListeners({StepScopeTestExecutionListener.class })
public class TestLeadsReader extends AbstractTransactionalJUnit4SpringContextTests {
@Autowired
private ItemStreamReader<Object[]> reader;
public StepExecution getStepExecution() {
StepExecution execution = MetaDataInstanceFactory.createStepExecution();
execution.getExecutionContext().putLong("campaignId", 1);
execution.getExecutionContext().putLong("partnerId", 1);
Calendar.getInstance().set(2015, 01, 20, 17, 12, 00);
execution.getExecutionContext().put("from", Calendar.getInstance().getTime());
Calendar.getInstance().set(2015, 01, 21, 17, 12, 00);
execution.getExecutionContext().put("to", Calendar.getInstance().getTime());
return execution;
}
@Test
public void testMapper() throws Exception {
for (int i = 0; i < 10; i++) {
assertNotNull(reader.read());
}
assertNull(reader.read());
}
В настоящее время, хотя PAGESIZE и saveState инъецируют правильно в мой читатель, параметры работы нет. Согласно документации, это все, что нужно сделать, и единственные проблемы, которые я нашел, касались использования jobParameters ['from'] вместо jobParameters [from]. Любая идея, что может быть неправильным?
Кроме того, метод open (executeContext) не вызывается моему читателю до того, как он вступит в тестовый метод, что не так, потому что я использую эти параметры задания для извлечения некоторых данных, которые должны быть доступны, когда метод чтения называется. Это может быть связано с вышеупомянутой проблемой, хотя, поскольку документация, касающаяся тестирования с поздним связыванием, говорит, что «Читатель инициализирован и привязан к входным данным».
StepExecution не предоставляет способ задания параметров JobParameters, но только для их извлечения. Я попытался использовать вместо JoScopeTestExecutionListener то, как он описывается в его документации, но я получил исключение при создании контекста выполнения, в котором жалоба на TestInstance была классом, когда ожидался интерфейс (если я правильно помню) –
И JobExecution не разрешить настройку параметров JobParameters, так что это был бы правильный способ сделать это? –
Вышеприведенный ответ верный, я просто не обращал внимания на MetaDataInstanceFactory, который действительно предоставляет метод для создания выполнения шага с использованием параметров jobParameters: MetaDataInstanceFactory.createStepExecution (jobParameters). Эта ссылка также была полезной: http://code.google.com/p/springbatch-in-action/source/browse/trunk/sbia/ch14/src/test/java/com/manning/sbia/ch14/batch/ интеграция/чтение/ReaderWithListenerTest.java? r = 245. –