这是主文件中我需要为其编写测试的函数。
allow_delete
这是我尝试创建的测试功能
@Override
public void processTask(JobExecutionContext arg0) throws TaskException {
if (BatchInputChannel.DB.toString().equals(runtimeContext.getProperties().getProperty(BATCH_CHANNEL_TYPE))) {
return;
} else if (BatchInputChannel.FILE.toString().equals(runtimeContext.getProperties().getProperty(BATCH_CHANNEL_TYPE))) {
jobLauncher = (JobLauncher) beanFactory.getBean("jobLauncher");
Job job = (Job) beanFactory.getBean("micorpFileLoadJob");
JobParameters jobParameters = new JobParametersBuilder()
.addLong("time", System.currentTimeMillis())
.toJobParameters();
try {
JobExecution jobExecution = jobLauncher.run(job, jobParameters);
System.out.println("jobExecution=="+jobExecution);
} catch (JobExecutionAlreadyRunningException | JobRestartException | JobInstanceAlreadyCompleteException
| JobParametersInvalidException e) {
throw new ProcessingException("File Loading Failed" + e.getMessage());
}
}
}
当我将项目作为J单元测试执行时,它预期会引发处理异常,但是我在预期中提到了“ JobParametersInvalidException”。
如您所见,我仅在此函数中添加了一个异常,以便覆盖主函数中的所有异常(在catch中)?
答案 0 :(得分:1)
Mockito.doThrow(new JobParametersInvalidException("Invalid")).when(mockJobLauncher).run(mockjob, mockjobParameters);
由于参数不匹配,所以未调用此doThrow。
在代码中,参数设置为:
JobParameters jobParameters = new JobParametersBuilder()
.addLong("time", System.currentTimeMillis())
.toJobParameters();
在单元测试中,匹配的模拟设置为:
mockjobParameters = new JobParametersBuilder().addLong("time", System.currentTimeMillis()).toJobParameters();
麻烦的是,几乎可以肯定地是,在建立测试与执行被测代码之间,毫秒级的时钟已经过去了。这意味着这些参数将不相等,因此不会引发异常。
更改模拟设置以使用任何JobParameters,例如:
Mockito.doThrow(new JobParametersInvalidException("Invalid")).when(mockJobLauncher).run(eq(mockjob), any(JobParameters.class));