亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在 mockito+J-unit 測試中捕獲或模擬意外異常?

如何在 mockito+J-unit 測試中捕獲或模擬意外異常?

呼啦一陣風 2023-02-23 10:01:32
這是我需要為其編寫測試的主文件中的函數。@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));



查看完整回答
反對 回復 2023-02-23
  • 1 回答
  • 0 關注
  • 194 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號