2017-09-05 229 views
2

想知道如何從使用EasyMock或PowerMock的方法中嘲諷類型爲Class的返回對象?EasyMock和返回泛型類的方法

我試圖嘲弄這個接口方法

Class<T> getRootBeanClass(); 

的返回類型我嘗試以下,但沒有快樂

EasyMock.expect(mockViolation.getRootBeanClass()).andReturn(EasyMock.anyObject()); 

我收到此錯誤信息

java.lang.IllegalStateException: matcher calls were used outside expectations 

任何幫助非常感謝

+1

只是爲了記錄:您可能想要刪除不再需要的舊評論... – GhostCat

回答

2

anyObject()參數匹配器。

您使用它,以便EasyMock可以區分您提出的不同嘲弄規範之間。像:

EasyMock.expect(mock.foo(eq("A"), anyObject()).andReturn(resultForA); 

EasyMock.expect(mock.foo(eq("B"), anyObject()).andReturn(resultForB); 

返回必須是一個真正的現有對象的對象(這既可以嘲笑,或不嘲笑)。但anyObject()不會爲您創建對象!

EasyMock的不能爲你生成仿製藥 - 所以需要一個演員,喜歡的東西:

Class<Foo> foo = (Class<Foo>) mock(Class.class) 

但是這並不能在這種情況下工作 - 爲java.lang.Class中是最後! EasyMock不能模擬最終課程!你需要PowerMock - 或者(我的推薦)最新版本的Mockito。

如果你去Mockito:請閱讀他們的文檔 - 因爲你必須啓用嘲笑最終課程 - 這是迄今爲止的一個實驗性功能。