這是我需要為其編寫測試的主文件中的函數。@Overridepublic 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()); } }}這是我試圖創建的測試函數@Test(expected = JobParametersInvalidException.class)public void processTaskWithFileInputJobFailed5() throws Exception { when(mockruntimeContext.getProperties()).thenReturn(mockProperties); when(mockProperties.getProperty(BATCH_CHANNEL_TYPE)).thenReturn("FILE"); when(mockbeanFactory.getBean("jobLauncher")).thenReturn(mockJobLauncher); when(mockbeanFactory.getBean("micorpFileLoadJob")).thenReturn(mockjob);}當我將項目作為 J 單元測試執行時,它期望拋出處理異常,但我在預期中提到了“JobParametersInvalidException”。如您所見,我在此函數中只添加了一個異常,為了覆蓋主函數中的所有異常(在 catch 內)需要做什么?
1 回答

慕尼黑的夜晚無繁華
TA貢獻1864條經驗 獲得超6個贊
Mockito.doThrow(new JobParametersInvalidException("Invalid")).when(mockJobLauncher).run(mockjob, mockjobParameters);
此 doThrow 未被調用,因為參數不匹配。
在代碼中,參數設置為:
JobParameters jobParameters = new JobParametersBuilder() .addLong("time", System.currentTimeMillis()) .toJobParameters();
在單元測試中,匹配的 mock 設置為:
mockjobParameters = new JobParametersBuilder().addLong("time", System.currentTimeMillis()).toJobParameters();
問題是,毫秒時鐘幾乎肯定會在設置測試和執行被測代碼之間滴答作響。這意味著這些參數將不相等,因此不會拋出異常。
更改模擬設置以期望任何 JobParameters,例如:
Mockito.doThrow(new JobParametersInvalidException("Invalid")).when(mockJobLauncher).run(eq(mockjob), any(JobParameters.class));
添加回答
舉報
0/150
提交
取消