2013-06-04 85 views
0
public abstract class A{ 
    public int methodInA(String a){ 
     return 0; 
    } 
} 

public class B extends A{ 
    String a = "ANYTHING"; 
    public void main(){ 
     int b = super.methodInA(a); 
    } 
} 

此代碼僅僅是一個例子。我想測試B並希望從B嘲笑方法methodINA帶參數。我可以用EasyMock做到這一點,如果是這樣的話?如何嘲笑從父類的方法與EasyMock的

回答

-1

這不是什麼嘲諷,你應該嘲笑方法main,但這使得測試毫無意義,因爲你不會測試只是EasyMock的實際代碼。當你想控制測試使用對象的對象的行爲

EasyMock的(和嘲諷一般)使用。

你的情況,你唯一的選擇是子類中的B測試,像這樣的例子:

@Test 
public void testSomething() 
{ 
    final int expected = 5; 

    B b = new B() 
    { 
    public int methodInA(String a) 
    { 
     return expected; 
    } 
    }; 

    b.main(); 

    //Add assertions here. 
} 
+0

在我的情況下,A是許多類的父。我想嘲笑A中的方法,所以我可以專注於B,並且不需要每次爲其子類編寫單元測試時都模擬A方法中的行爲。在我的情況下,使用子類可能仍然需要大量的重複工作。你有其他解決方案嗎? – Jane

+0

的'B'並不需要在試驗方法,甚至測試類,但是你需要專注'B'某處實現你想要的專業化。當你用嘲弄的API,你實際上是創建嘲笑接口/類的一個新的實現 - 在這個使用動態代理或一類的字節碼操作做了一個接口的情況下 - 即根據您所設定的預期行爲。如果你沒有設定期望,模擬API不會調用類上的方法。這裏 –

+0

的問題聽起來更像是你的設計有問題 - 而不是繼承考慮使用,你有一個類,提供了'methodInA'和該類的實例注入B'的'實例組成。這樣,你只需簡單地模擬提供'methodInA'的類並在創建'B'時注入模擬。 –