2017-08-18 64 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