2016-12-06 80 views
-3

我試圖嘲笑來自我的課程的另一個類的實例的調用。我看到的問題是,當我運行我的測試時,看起來我的模擬對象不會被真實對象所取代。我在這裏舉了一個簡單的例子來解釋這個案例。在這裏,我想打印tada而不是的默認方法this is awsome。我已經把我的代碼放在下面的鏈接中供參考,請讓我知道我做錯了什麼,如果有的話。模擬來自課堂的外部方法調用注意:

https://gist.github.com/anonymous/1eab366c60efb75b9075f100a67c851b

ExcelSupporTest打印this is awsome代替tada當我試圖嘲弄optionPane.printAwsome()可有人點我到我在做什麼錯在這裏。

+1

我什麼也沒看到上面的嘲笑。你能分享一下你試圖模擬方法/課程的代碼嗎?我也沒有看到上面的任何測試。 – nullpointer

+0

我做了一個更簡單的版本,以消除開銷看看,讓我知道如果這有助於 – user2540256

+0

你已經改變了問題360與代碼刪除以及。請改善問題以獲得更好的理解。這也有助於更新問題 – nullpointer

回答

0

什麼,我可以推斷形成的問題,如果你試圖嘲弄的方法showMessageDialog一個電話,試圖嘲諷DefaultOptionPane如下:

DefaultOptionPane defaultOptionPane = mock(DefaultOptionPane.class); 
when(defaultOptionPane.showMessageDialog(anyObject(), anyObject(), anyString(), anyInt())) 
       .then(//do what you want to do here <Answer>); 

什麼這只是意味着它的可讀性也就是每當你打電話給showMessageDialog與任何你想返回的東西,你說Answerthen一套參數。

+0

我試過,但它仍然進入showMessageDialog似乎無法弄清楚爲什麼 – user2540256

0

這麼長的故事很短,除非你將它作爲參數傳遞給方法,否則不能模擬方法調用。

它成爲與範圍界定問題,所以這個

public void testMethod(DefaultOptionPane optionPane) { 

     System.out.println("Entering method"); 
     System.out.println(optionPane.printAwsome()); 
     System.out.println("Exiting Method"); 
    } 

替換此

public void testMethod() { 
     DefaultOptionPane optionPane = new DefaultOptionPane(); 
     System.out.println("Entering method"); 
     optionPane.printAwsome(); 
     System.out.println("Exiting Method"); 
     } 

,然後你可以嘲笑optionPane

+0

不,我不認爲你是嘲笑任何東西仍然在這段代碼。 – nullpointer

+0

我用ExcelSupportTest.java代替了gist鏈接,其中我嘲笑了optionPane.printAwsome()。 – user2540256

+0

我將代碼更改爲更簡單的代碼,以避免不必要的細節 – user2540256