2015-01-21 3 views
0

결합 I 리더는 다음과 같이 구성되어 :스프링 배치 : 단위 테스트 늦은

<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']를 사용하는 것이 유일한 문제입니다. 어떤 생각이 잘못 될 수 있습니까?

또한 read 메소드가 실행될 때 사용할 수 있어야하는 일부 데이터를 검색하기 위해 작업 매개 변수를 사용하기 때문에 테스트 메소드에 들어가기 전에 open (executionContext) 메소드가 호출되지 않습니다. 라는. 늦은 바인딩으로 테스트하는 것과 관련된 문서에서 "독자가 초기화되어 입력 데이터에 바인딩되어 있기 때문에 위의 문제와 관련이있을 수 있습니다.

답변

0

테스트에서 단계 실행 컨텍스트 변수로 fromto을 설정하고 있습니다. 그러나 응용 프로그램 컨텍스트 구성에서이를 작업 매개 변수로 검색하고 있습니다. 단위 테스트에서 작업 매개 변수로 설정해야합니다.

또한 열기/업데이트/닫기 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.createStepExecution (jobParameters)을 사용하여 단계 실행을 만드는 메소드를 실제로 제공하는 MetaDataInstanceFactory에주의를 기울이지 않았습니다. 이 링크는 도움이됩니다. 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. –