2013-01-21 51 views
1

有對象面板裏面的方法我如何方法調用anoither方法Mock對象

protected Confirmation confim() { 
    Confirmation confirmation = new Confirmation() { 
     @Override 
     public void onConfirm() { 
      doCancel(); 
     } 
    }; 

    return confirmation;   
} 

protected void doCancel() { 
    .... 
    } 
} 

,我需要檢查確認()調用doCancel方法

我的測試

@Test 
public void test() { 
    Panel panel = Mockito.mock(Panel.class); 

    Mockito.doCallRealMethod().when(panel).confirm(); 
    Mockito.doCallRealMethod().when(panel).cancel(); 

     panel.confirm(); 

    Mockito.verify(panel).cancel(); 
}` 

問題是,cancel()永遠不會被調用...也許這是因爲「OnConfirm()」是ovverided方法,它需要一個模擬...或somthing ..有人可以幫助如何測試?

P.S.面板必須被模擬。

問題在於不要調用panel.confirm()。onConfirm(); 這是愚蠢的錯誤.. 因此請刪除這個問題..

+0

調用它的一個叫做'doCancel'沒有取消方法,這是一個錯字或取消'()'稱爲內'doCancel' – cowls

+0

它是愚蠢的錯誤,因爲我不打電話panel.confirm()onConfirm();所以請刪除這個問題 – x3mik

回答

2
@Test 
public void test() { 
    Panel panel = Mockito.mock(Panel.class); 

    Mockito.doCallRealMethod().when(panel).confirm(); 
    Mockito.doCallRealMethod().when(panel).cancel(); 

     panel.confirm().onConfirm(); 

    Mockito.verify(panel).cancel(); 
}` 
+0

謝謝我發現它也......但爲時已晚,這是愚蠢的錯誤..這個問題應該刪除 – x3mik

+1

@ x3mik通常我們不會刪除問題的原因,只是接受答案,如果別人讓同樣的錯誤可能會幫助他們 – cowls