2012-12-17 2 views
1

나는 스프링 배치 작업을 매개 변수로 사용하며 매개 변수는 일반적으로 작업이 실행될 때마다 동일합니다. 기본적으로 스프링 배치는 ... 그런 식으로 동일한 매개 변수를 다시 사용하지 않습니다 그래서 간단한 증 분기를 생성하고,이 같은 내 일에 추가 : 표준 CommandLineJobRunnerhttp://numberformat.wordpress.com/2010/02/07/multiple-batch-runs-with-spring-batch/JUnit을 통해 실행할 때 스프링 배치 작업 증가 기 실행

사용 직장을 운영하려면 증분자가 사용되도록 -next 매개 변수를 전달해야합니다.

그러나 JobLauncherTestUtils.launchJob(JobParameters)을 사용하여 JUnit 클래스 내에서 종단 간 작업 테스트를 실행하면 ... 증분자가 사용해야한다고 선언 할 수있는 방법을 찾을 수 없습니다. 아마도 그 매개 변수로 이미 실행 되었기 때문에 작업은 그냥 조용히 건너 뛴다 (아래 참고 참조).

JobParameters 클래스는 이름 - 값 쌍의 컬렉션을 보유하기위한 것이지만 ... -next 매개 변수는 다릅니다. 대시로 시작하고 해당 값이 없습니다. 다양한 실험을 시도했지만 JobParameters 컬렉션에 뭔가를 추가하려고 시도하는 것은 티켓이 아닌 것 같습니다.

누구나 -nextCommandLineJobRunner으로 전달하는 것과 동일한 JUnit을 알고 있습니까?

  1. 작업이 처음으로 작동하고, 내가 작업 저장소 데이터베이스를 쓸어 경우 작동 :

    참고 : 때문에 나는 문제가 내 증 분기가 무시되고 있음을 가정한다. 다시 시도 할 때만 실패합니다.

  2. 변수를 하드 코드하고 매개 변수를 모두 제거하면 작업이 정상적으로 작동하고 다시 시도됩니다.

답변

1

JobLauncherTestUtils 클래스에는 정확히 동일한 필요를 충족시키는 getUniqueJobParameters 메소드가 포함되어 있습니다.

/** 
* @return a new JobParameters object containing only a parameter for the 
* current timestamp, to ensure that the job instance will be unique. 
*/ 
public JobParameters getUniqueJobParameters() {Map<String, JobParameter> 
parameters = new HashMap<String, JobParameter>(); 
parameters.put("random", new JobParameter((long) (Math.random() * JOB_PARAMETER_MAXIMUM))); 
return new JobParameters(parameters); 
} 

사용이 될 것이다 샘플,

JobParameters params = new JobParametersBuilder (jobLauncherTestUtils.getUniqueJobParameters()).toJobParameters(); 
    //extra parameters to be added 
JobExecution jobExecution = jobLauncherTestUtils.launchJob(params); 
+0

허 ... 그래서 단위 테스트는 정말 작업의 반복자를 테스트하는 것이 아니라 완전히 그것의 필요성을 무시하지 않습니다. Spring Batch에 관한 많은 것들은 지금까지는 직관적이지 않았습니다 ... 그러나이 접근법은 제 문제를 해결해주었습니다. 감사합니다! –

관련 문제