2015-01-21 5 views
0

У меня читатель настроен, как показано ниже:Спринг Пакетное: тестовый модуль позднего связывания

<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) не вызывается моему читателю до того, как он вступит в тестовый метод, что не так, потому что я использую эти параметры задания для извлечения некоторых данных, которые должны быть доступны, когда метод чтения называется. Это может быть связано с вышеупомянутой проблемой, хотя, поскольку документация, касающаяся тестирования с поздним связыванием, говорит, что «Читатель инициализирован и привязан к входным данным».

ответ

0

Вы устанавливаете from и to в качестве переменных контекста выполнения в вашем тесте. Но в конфигурации контекста вашего приложения вы получаете их как параметры задания. Вы должны установить их в качестве параметров задания в своем модульном тесте.

Кроме того, если вы хотите вызывать методы жизненного цикла open/update/close ItemStream, вы должны выполнить этот шаг. См. http://docs.spring.io/spring-batch/trunk/apidocs/org/springframework/batch/test/JobLauncherTestUtils.html#launchStep-java.lang.String-org.springframework.batch.core.JobParameters-

+0

StepExecution не предоставляет способ задания параметров JobParameters, но только для их извлечения. Я попытался использовать вместо JoScopeTestExecutionListener то, как он описывается в его документации, но я получил исключение при создании контекста выполнения, в котором жалоба на TestInstance была классом, когда ожидался интерфейс (если я правильно помню) –

+0

И JobExecution не разрешить настройку параметров JobParameters, так что это был бы правильный способ сделать это? –

+0

Вышеприведенный ответ верный, я просто не обращал внимания на 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. –

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

  • Нет связанных вопросов^_^