2011-07-11 46 views
3

我試圖找出編寫一個重載方法調用超()作爲最後一步的單元測試的最佳方式。基本上,我想在使用基礎類之前按下參數。單元測試重寫的方法調用超()

這裏有一個方法的一個例子:

@Override 
    public JobExecution run(Job job, JobParameters passedParams) 
      throws JobExecutionAlreadyRunningException, JobRestartException { 

     JobParameters launchParameters; 

     if(passedParams.isEmpty()) { 
      launchParameters = jobParameterSetter.getJobParameters(); 
     } else { 
      launchParameters = passedParams; 
     } 

     return super.run(job, launchParameters); 
    } 

什麼它歸結爲是,我不能找個地縫,以檢查是在最終super.run()調用的參數,這是所有我想測試。基類有幾個依賴關係,實際上沒有必要測試這個類(更不用說更多的工作)。

組合是一個解決方案,但它是一個相當複雜的基類,我需要公開整個事物,而只需重寫一些方法。我也在考慮僞造基類來進行測試,這很簡單,但我不確定如何更改類路徑來運行單元測試(Eclipse用於單個測試; Maven用於構建測試 - 也許是一個問題呢?)。


我不得不想象這已被問過,但我找不到完全匹配。

+0

不確定你在問什麼,你能澄清嗎?它是否要攔截對「super.run」的調用?你能寫一些僞代碼給我們更多的提示嗎?順便說一句,你可以寫你的方法爲一行:'返回super.run(job,passedParams.isEmpty()?jobParameterSetter.getJobParameters():passedParams);'較少的代碼是(通常)很好:) – Bohemian

回答

1

看來你想測試的邏輯是if-else流程,而不是對基類的調用。我會通過創建一個名爲getLaunchParameters(JobParameters jobParameters)的受保護方法來做到這一點,它可以完成您對測試感興趣的邏輯。

通過這種方式,您要測試的邏輯經過測試,您對測試不感興趣的邏輯未經過測試,並且您已經打破了可能在未來其他地方使用的一段代碼。

+0

Duh。我自己應該想到這一點。謝謝。 – Ickster

+0

別擔心。在未來,你將永遠在你的腦海中有這個! :) –

相關問題