2012-02-03 142 views
1

試圖使用EasyMock來測試被保護的方法是否被調用,不知道這是否是最好的方法來做到這一點...但是,如何知道didIgetCalled()實際上是調用callMe()時調用?EasyMock和測試受保護的方法

public Class testMe(){ 
    public int callMe(){ 
     if(true){ 
      didIgetCalled(); 
     } 
     return 1; 
    } 
    protected int didIgetCalled(){ 
     return 2; 
    } 
} 
+1

我相信你能不能做到這一點,你只能檢查是否公開方法被調用。在進行單元測試時,儘量從「黑盒」測試的角度考慮一下,不要過多擔心內部發生的情況,只關心輸入和輸出以及與其他對象的交互。 – ggreiner 2012-02-03 01:12:43

+0

好吧...有點知道,但想知道是否有方法來測試某個方法是否被父類方法調用,或者不是從父方法中調用,會是一件好事。 – Phoenix 2012-02-03 16:52:27

+0

是的,通常這不足以驗證確切地調用了哪些方法,而只是在調用之後的對象的狀態是您期望的狀態時才足夠。因此,在您的示例中,如果您要驗證callMe()的返回值,那麼內部涉及的方法與外部無關。 – centic 2012-02-03 18:41:58

回答

2

這是你可以測試方法不使用EasyMock的一種方式,但我的建議是:如果它不公開,不寫一個測試爲它

Method method = testMe.class.getDeclaredMethod("didIgetCalled", new Class[]{}); 
method.setAccessible(true); 
testMe testClass = new testMe(); 
int invoke = (Integer) method.invoke(testClass); 
assertEquals(2,invoke); 

我知道,這不能完全解決你的問題,但它是一個開始 :)

0

如何:

你可以保持相同的包名你的測試類與被測試的類相同。這樣,如果你的班級說MyClass.javasrc目錄下,包名爲com.abc.mypackage那麼你的測試班說MyClassTest.java可能在test目錄下有相同的包名。見下圖:

enter image description here