Я видел много разных способов, которыми люди тестировали свои модульные тесты на модернизацию2, и я чувствую, что это было самое близкое, что я получил. Я могу смоделировать свой интерфейс API, но когда дело доходит до насмешки над вызовом, вызов всегда возвращается null
. Есть что-то, что я пропускаю или делаю неправильно?
Вот мой метод тестирования:
@Test
public void testApiSuccess() {
TestRequestBody testRequestBody = Util.getTestBody();
ApiService mockedApiService = Mockito.mock(ApiService.class);
Call<Void> mockedCall = Mockito.any(Call.class);
when(mRestClient.apiService()).thenReturn(mockedApiService);
Mockito.when(mockedApiService.executeApi(testRequest)).thenReturn(mockedCall);
Mockito.doAnswer(invocation -> {
Callback<Void> callback = invocation.getArgumentAt(0, Callback.class);
callback.onResponse(mockedCall, Response.success(null));
return null;
}).when(mockedCall).enqueue(any(Callback.class));
presenter.executeApi();
verify(view).showSuccess();
}
Блок кода, который я тестирую, выглядит следующим образом:
@Override
public void executeApi() {
RequestBody requestBody = getRequestbody();
Call<Void> call = mRestClient.apiService().executeApi(requestBody);
call.enqueue(new Callback<Void>() {
@Override
public void onResponse(Call<Void> call, Response<Void> response) {
if (response != null && response.code() == 200) {
view.showSuccess();
} else {
view.showError();
}
}
@Override
public void onFailure(Call<Void> call, Throwable t) {
view.showError();
}
});
}
Мой тест продолжается до call.enqueue
и не проходит здесь, потому что call
равен нулю. Что-то не так, когда я пытаюсь издеваться над call
. Занимался здесь сейчас пол дня. Любые подсказки могут помочь.