Привет, ребята. Я младший разработчик Android-приложений для MVVM и модульного тестирования.в моем коде я хотел бы написать тест, а в моем тесте я хотел бы высмеять мой перезвонил.и проверьте поведение моего модуля для множественного ответа от сервера и множественного кода, такого как 200 или 401 код сервера.как я могу это сделать?
это мой RequestCallback.java
private MediatorLiveData<ServerResponseStatus> responseStatus = new MediatorLiveData<>();
private RequestListener<T, V> listener;
private TypeToken<V> type;
{
responseStatus.setValue(ServerResponseStatus.STARt);
}
public RequestCallback(Call<T> call, RequestListener<T, V> listener, TypeToken<V> type) {
this.listener = listener;
this.type = type;
responseStatus.postValue(ServerResponseStatus.SHOW_LOADING);
call.enqueue(this);
}
@Override
public void onResponse(@NonNull Call<T> call, @NonNull Response<T> response) {
responseStatus.postValue(ServerResponseStatus.HIDE_LOADING);
if (response.code() >= 200 && response.code() < 300)
listener.onResponse(response);
else {
if (response.code() == 401)
responseStatus.postValue(ServerResponseStatus.UNAUTHORIZED);
try {
String errorResponse = response.errorBody().string();
Gson gson = new Gson();
V fromJson = gson.fromJson(errorResponse, type.getType());
listener.onError(fromJson);
} catch (Exception e) {
e.printStackTrace();
listener.onFailure(response.code(), response.message());
}
}
}
@Override
public void onFailure(@NonNull Call<T> call, @NonNull Throwable t) {
responseStatus.postValue(ServerResponseStatus.HIDE_LOADING);
listener.onFailure(500, t.getMessage());
}
public MediatorLiveData<ServerResponseStatus> getResponseStatus() {
return responseStatus;
}
это мой тест
@Test
public void checkTimeTest(){
ApiInterface mockedApiInterface = Mockito.mock(ApiInterface.class);
Call<TimeCheckResponse> mockedCall = mock(Call.class);
when(mockedApiInterface.timeCheck()).thenReturn(mockedCall);
doAnswer(new Answer<Void>() {
@Override
public Void answer(InvocationOnMock invocation) throws Throwable {
Callback<TimeCheckResponse> callback = invocation.getArgument(0);
TimeCheckResponse timeCheckResponse = new TimeCheckResponse("IR");
callback.onResponse(mockedCall, Response.success(timeCheckResponse));
return null;
}
}).when(mockedCall).enqueue(any(Callback.class));
timeChecker.check(timeCheckerListener);
verify(timeCheckerListener).onCorrectTime();
}
и это мой ответ
Wanted but not invoked: timeCheckerListener.onCorrectTime();-> at com.teskaco.bbpos.splash.SplashScreenViewModelTest.checkTimeTest(SplashScreenViewModelTest.java:85)
Actually, there were zero interactions with this mock.