Модифицированный тестовый модуль обратного вызова в Android - PullRequest
0 голосов
/ 15 октября 2018

Привет, ребята. Я младший разработчик 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.
...