2013-06-13 105 views
1

我剛開始嘲笑我們的應用程序的不同層次。當我調用最後一類靜態方法時,我的一個模擬對象正在返回NPE。有沒有解決的辦法?模擬對象調用最終類與Mockito靜態方法

例如

when(mockObject.someMethod(FinalClass.staticMethod(someParam)).anotherMethodCall) 
    .thenReturn("someString"); 
+0

的Mockito不能嘲笑一般final的方法;然而,我懷疑即使刪除'final'也會對此有所幫助... – fge

+0

mockito模擬最終類或統計方法是不可能的。雖然,我認爲你可以用力量模擬來做到這一點。也許你可以看看http://code.google.com/p/powermock/ – nikkatsa

+0

對不起,爲了混淆,我更新了我的代碼片段。請檢查出 – user962206

回答

8

你必須一起使用PowerMock和Mockito。

我不明白你的代碼段試圖做什麼,但下面的代碼片段允許Calendar類的靜態getInstance()方法返回一個模擬日曆對象 。也許這會爲你指明正確的方向

在類級別:

@RunWith(PowerMockRunner.class) 
@PrepareForTest(Calendar.class) 
public class XXXXXX { 

在您的測試方法

PowerMockito.mockStatic(Calendar.class); 
    Calendar calendar = mock(Calendar.class); 
    when(calendar.get(eq(Calendar.HOUR_OF_DAY))).thenReturn(3); 

    Mockito.when(Calendar.getInstance()).thenReturn(calendar); 
+0

如果我的類已用'@RunWith(Theories.class)'註釋'怎麼辦? – niaomingjian

2

的Mockito不支持嘲諷最終class.Have看看PowerMock。它可以讓你嘲笑靜態方法和類。它可以和Mockito一起工作,documentation解釋瞭如何做到這一點。

+0

我發佈了錯誤的代碼片段。請重新檢查我的代碼 – user962206

+2

無所謂,Mockito無法模擬最終課 – anergy

+0

所以你的意思是它嘲笑最後一堂課?我認爲這只是調用最終類的靜態方法 – user962206