2015-04-21 35 views
0

我想在單步測試(如「在測試時間」)注入一些在我的sprint批處理步驟流的運行時提供的上下文值。我們已瀏覽this 但它不是很清楚...如何在單個彈簧批量步驟的測試時間注入上下文執行?

下面我簡單的測試用例,豐富了我的紅色here。 必須有一個錯誤,因爲我看不到我的注射效果,即使我精進入getStepExecution():

@RunWith(SpringJUnit4ClassRunner.class) 
 
@ContextConfiguration(locations = { "classpath:launch-context.xml" }) 
 
@TestExecutionListeners({ DependencyInjectionTestExecutionListener.class, StepScopeTestExecutionListener.class }) // Inject feature enablers ? 
 
public class ImportJobOrganisationViaRouting extends DwhITest { 
 
\t 
 
\t protected static final Logger logger = LoggerFactory.getLogger(ImportJobOrganisationViaRouting.class); 
 

 
\t @Autowired 
 
\t protected JobLauncher jobLauncher; 
 

 
\t @Autowired 
 
\t @Qualifier("myjob") 
 
\t protected Job job; 
 

 
\t protected JobParameters jobParameters; 
 
\t 
 
\t private static JobExecution jobExecution; 
 

 
\t // Inject values in here ?... 
 
\t public StepExecution getStepExection() { 
 
\t \t System.out.println("!!!!!! TEST inject EXECUTION STEP !!!!!!!"); 
 
\t \t StepExecution execution = MetaDataInstanceFactory.createStepExecution(); 
 
\t \t execution.getExecutionContext().putLong("dateKey", 200); 
 
\t \t return execution; 
 
\t } 
 

 
\t 
 
\t @Test 
 
\t public void launch() throws JobExecutionAlreadyRunningException, JobRestartException, JobInstanceAlreadyCompleteException, JobParametersInvalidException { 
 
\t \t 
 
\t \t jobParameters = new JobParametersBuilder().addLong("currTime", System.currentTimeMillis()).toJobParameters(); 
 
\t \t jobExecution = jobLauncher.run(job, jobParameters); 
 
\t \t assertEquals(BatchStatus.COMPLETED, jobExecution.getStatus()); 
 

 
\t }

如何應對這種需求?

我們會深表謝意。

Thx提前,;-)

+0

在你的問題你的狀態,你要執行'Step' ,但在你的測試中,你正在執行一項工作。你想要做什麼? –

+0

真的,邁克爾! 這是我想要執行的工作。 但它也可能是一個單一的步驟。說這是我想要在其上下文中用注入值進行測試的一個步驟... – SylvainR

+0

幾個月後......對於此線程感興趣的人:響應在這裏:http://docs.spring.io/spring-batch/軀幹/參考/ HTML/testing.html – SylvainR

回答

0

另一種方法是使用JobLauncherTestUtils,你必須:

StepExecution execution= MetaDataInstanceFactory.createStepExecution(); 

... //fill your context 
jobLauncherTestUtils.launchStep("myStep", execution.getExecutionContext())