2015-11-23 18 views
0

所以比方說,我有一些類中定義:EasyMock的構造有很多爭論

MyClass { 
    private A _a; 
    private B _b; 
    private C _c; 

    MyClass(A a, B b, C c) { 
    _a = a; 
    _b = b; 
    _c = c; 
    } 

    public someMethodIDontCareAbout() { 
    _b.doSomething(); 
    _c.doSomething(); 
    } 

    public someMethodIWantToTest() { 
    _a.doSomething(); 
    } 
} 

現在,讓我們說,我只是想測試someMethodIWantToTest(),但我不關心其他的方法。我寧願不必創建一個新的MyClass對象和模擬類B和C.該構造函數需要它們,但我沒有使用它們,因爲我的方法我想測試只使用答:

有沒有辦法在容易模擬說EasyMock.createMockBuilder(MyClass.class).withConstructor(EasyMock.createNiceMock(A.class)).createMock();

有沒有構造函數只需要類A,但這就是我想要的。如果沒有指定B和C,沒有簡單的方法可以做到這一點嗎?理想情況下,它會爲我不想要的構造函數中的所有其他參數創建niceMocks。

+2

你不能使用'null'值? – Keppil

+0

是的,但是如果你有spring bean,那麼可能有30個參數給構造函數,而且當我只關心2個參數時,排隊所有參數和放置28個nulls是很煩人的。我希望有一些EasyMock的幻想。 – REMOSEWA

回答

1

您需要閱讀Mockito如何工作。 其基本思想是它擴展了你的類,並且覆蓋了所有的方法,並且允許你返回你想要的東西。

語法是:

MyClass myClass = Mockito.mock(MyClass.class); 
Mockito.when(myClass.getMethod()).thenReturn(whatever); 

同樣適用於EasyMock的。

MyClass myClass = EasyMock.createMock(MyClass.class); 
EasyMock.expect(myClass.getMethod).andReturn(whatever).times(1); 
1

實際上,如果您重構構造函數以接收Config對象而不是參數列表,那麼這會容易得多。

ie如果您有一個Config對象,其中包含A,B和C的getter和setter,並且只需將一個Config對象傳遞給構造函數,那麼您可以爲Config對象創建一個niceMock,然後模擬get方法getA()並讓它返回你需要的任何對象。