gpt4 book ai didi

android - Retrofit 中的单元测试以进行回调

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:50:08 24 4
gpt4 key购买 nike

我在这里得到了演示者中的代码示例。我如何在改造调用中为 onSuccess 和 onFailure 编写测试

public void getNotifications(final List<HashMap<String,Object>> notifications){

if (!"".equalsIgnoreCase(userDB.getValueFromSqlite("email",1))) {
UserNotifications userNotifications =
new UserNotifications(userDB.getValueFromSqlite("email",1),Integer.parseInt(userDB.getValueFromSqlite("userId",1).trim()));
Call call = apiInterface.getNotifications(userNotifications);
call.enqueue(new Callback() {
@Override
public void onResponse(Call call, Response response) {
UserNotifications userNotifications1 = (UserNotifications) response.body();


if(userNotifications1.getNotifications().isEmpty()){
view.setListToAdapter(notifications);
onFailure(call,new Throwable());
}
else {
for (UserNotifications.Datum datum:userNotifications1.getNotifications()) {
HashMap<String,Object> singleNotification= new HashMap<>();
singleNotification.put("notification",datum.getNotification());
singleNotification.put("date",datum.getDate());
notifications.add(singleNotification);
}
view.setListToAdapter(notifications);
}
}

@Override
public void onFailure(Call call, Throwable t) {
call.cancel();
}
});
}
}

}

我如何编写单元测试来覆盖这段代码的所有情况。

谢谢

最佳答案

当您想测试来自服务 (API) 的不同响应时,最好模拟它并返回您需要的内容。

    @Test
public void testApiResponse() {
ApiInterface mockedApiInterface = Mockito.mock(ApiInterface.class);
Call<UserNotifications> mockedCall = Mockito.mock(Call.class);

Mockito.when(mockedApiInterface.getNotifications()).thenReturn(mockedCall);

Mockito.doAnswer(new Answer() {
@Override
public Void answer(InvocationOnMock invocation) throws Throwable {
Callback<UserNotifications> callback = invocation.getArgumentAt(0, Callback.class);

callback.onResponse(mockedCall, Response.success(new UserNotifications()));
// or callback.onResponse(mockedCall, Response.error(404. ...);
// or callback.onFailure(mockedCall, new IOException());

return null;
}
}).when(mockedCall).enqueue(any(Callback.class));

// inject mocked ApiInterface to your presenter
// and then mock view and verify calls (and eventually use ArgumentCaptor to access call parameters)
}

关于android - Retrofit 中的单元测试以进行回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45160055/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com