2015-04-07 47 views
0

我正在使用Retrier類來重試失敗的任務。我的代碼看起來像這樣。我在我的測試用例中使用Mockito嘲笑Retrier類如何使用Mockito模擬然後使用參數回答

someMethod() { 
Callable a = new TestingCall() 
Retrier.call(a, arg2, arg3) 
..... 
} 

我的測試代碼看起來像這樣。

testMymethod() 
// mock(Retrier.class) 
when(Retrier.call(any(Callable.class), anyObject(), anyObject()).thenAnswer(new Answer<Boolean>() { 
@Override 
    public Boolean answer(InvocationOnMock invocation) throws Throwable { 
     return true; 
    } 
}); 

但是,當運行測試,它在Retrier.call

Retrier.call拋出一個零指示字例外使用傳遞的參數,其即將作爲空因此NPE。

注意:我也嘗試過傳遞類似的東西了。

時(Retrier.call(任何(Callable.class),任(arg2.Class), 任何(arg3.Class),其中ARG2和參數3被嘲笑了。

關於此錯誤的任何想法?還是成功地做它的另一種方式

+0

如果'Retrier.call'是靜態調用,這並不工作,因爲做的Mockito **不**使用靜態。還有什麼是'arg2.Class'(類上的大寫C?) – 2015-04-07 06:01:40

+0

這是一個錯字。它是.class(小寫)。它是靜態的。如果我將其更改爲非靜態,這是否可行?如果不是,那麼備用解決方案是什麼? – jigsaw

+0

你應該發佈整個課程(Retrier和一個運動'someMethod')。 – 2015-04-07 08:58:16

回答

0

你需要以嘲笑的靜態方法使用PowerMock用的Mockito:

+0

檢查此主題http://stackoverflow.com/questions/21105403/mocking-static-methods-with-mockito有一個例子。 –

相關問題