2017-08-18 65 views
1

在我的API(含改造),我有大量的請求,這是這樣的:如何模擬無效呼叫?

public Call<Void> postAsyncReserveDevice(@NonNull ReservedWorkerData data, @NonNull String token) { 

     return apiService.postReservedWorker(
       data, 
       ApiPrefs.TOKEN_PREFIX + token); 
} 

在那裏我忽略響應的結果 - 他成功與否,這是非常重要的。

但是我在單元測試中遇到了一個問題。我需要嘲笑API答案:

@Test 
public void test() { 
//... 
when(apiService.postAsyncReserveDevice(
       eq(data), any(String.class))) 
       .thenReturn(Calls.response(Any() as Void)) 
//... 
} 

看起來不錯,但是當我運行測試情況下,我看到的錯誤:

java.lang.ClassCastException: java.lang.Object cannot be cast to java.lang.Void 

如何模擬和測試這些方法在我的API?

+0

你有沒有試過使用'any(Void.class)'? –

+0

nope。我換一種方式。但這也行得通! (我的解決方案如此愚蠢:'.... thenReturn(Calls.response(makeVoid())); private void void makeVoid(){return null}') – abbath0767

回答

0

該方法返回Call<Void>,所以爲什麼不在模擬方法中返回:Mockito.any(Call.class)

例如:

Mockito.when(mock.postAsyncReserveDevice()).thenReturn(Mockito.any(Call.class)); 

雖然它宣稱原始Call會產生在編譯時警告。

+0

上面diddnt工作。任何其他建議? – jonney