在我的api(使用Retrofit)中,我有很多这样的请求:
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 :(得分:0)
该方法返回Call<Void>
,为什么不返回模拟方法:Mockito.any(Call.class)
?
例如:
Mockito.when(mock.postAsyncReserveDevice()).thenReturn(Mockito.any(Call.class));
虽然它会在编译时产生警告,因为它声明了原始Call
。
答案 1 :(得分:0)
我使用Kotlin使用的解决方案:
@Test
fun the_test() {
val call: Call<Void> = Calls.response(makeVoid())
`when`(apiManager.enablePushNotification(any())).thenReturn(call)
...
}
辅助功能:
private fun makeVoid(): Void? = null
仅此而已