2013-10-15 44 views
0

所有在模擬類上沒有被模擬的方法工作正常嗎?EasyMock:部分模擬類

E.G.

鑑於對象

public class Shape { 
    public void createShape(...){ 
     .... 
    } 

    public void removeShape(...){ 
     .... 
    } 

    ... 
} 

如果這被嘲笑了像

shape = createMock(Shape.class, new Method[]{Shape.class.getMethod("removeShape", new Class[]{...})}); 

將所有其他的方法,如createShape()工作還是你模擬出你想要使用的所有方法?

+1

爲什麼不試試呢? –

+0

我已經嘗試了類似的東西,它看起來並不像所有其他方法的工作,但因爲我只學習easymock框架即時通訊不知道是否有可能以另一種方式做到這一點,或者如果我在我的例子中做了不正確的事情 – flexinIT

回答

4

總之,是的。

部分嘲笑的工作方式與嘲笑類的實例完全相同,但他們有能力爲您設置爲嘲笑的方法添加期望。 當你有一個重載方法時,這通常也很有用,它也依賴於該方法的超類實現。

看起來您的示例使用了不推薦使用的createMock(Class,Method ...)方法,所以我將提供一個示例,說明如何爲Shape類創建部分模擬。

final IMockBuilder<Shape> mockBuilder = EasyMock.createMockBuilder(Shape.class); 
mockBuilder.addMockedMethod(Shape.class.getMethod("removeShape", new Class[]{...})); 
final Shape mockShape = mockBuilder.createMock(); 

這將提供一個行爲完全正常的Shape對象,直到它嘗試使用removeShape方法,它需要的行爲的一些期望。

就我個人而言,我很少使用帶有Method參數的addMockedMethod版本。通常,我嘲笑的方法足夠明顯,可以使用addMockedMethod(String)版本。所以我最有可能使用以下內容:

final IMockBuilder<Shape> mockBuilder = EasyMock.createMockBuilder(Shape.class); 
mockBuilder.addMockedMethod("removeShape"); 
final Shape mockShape = mockBuilder.createMock(); 

這是一個更清潔我的眼睛,並達到相同的結果。

請記住,這些部分嘲諷遵循與完全嘲諷相同的規律。 所以你不能嘲笑這樣的最終方法。

希望能幫到