Есть unit test
для Retrofit
запросы щас мне возвращают типизированые ответы от сервера Call<List<GroupObject>>
в таком виде достаточно просто его тестировать:
GroupObject group = new GroupObject("Test group", "short name", "image/logo/ava.img", GroupCategory.AUTO_MOTO, this.USER_ID);
String json = this.gson.toJson(group);
Response<GroupObject> insertResponse = this.groupApi.insertNewGroup(json).execute();
GroupObject insertedGroup = insertResponse.body();
assertEquals("Request successful", 200, insertResponse.code());
assertNotNull("Body is not empty", insertedGroup);
assertNotNull("Id must not be null", insertedGroup.getId());
Response<List<GroupObject>> getResponse = this.groupApi.getGroups().execute();
List<GroupObject> all = getResponse.body();
assertEquals("Request successful", 200, getResponse.code());
assertNotNull("Body is not empty", all);
assertTrue("List of groups must containst minimum one group which was created above",
all.stream().anyMatch(object -> {
return object.getId() != null && object.getId().equals(insertedGroup.getId());
})
);
Но я хочу вместо:
Call<List<GroupObject>> getGroups();
использовать:
Observable<List<GroupObject>> getGroups();
Но не могу понять как написать аналогичный тест, но для Observable
.
Нашел вопрос относящийся к этой теме, но не до конца понимаю как получить аналогичный тесты при использовании Observable
.
Дополнительно помимо JUnit
добавил зависимости Mockito
.
Подскажите, как можно реализовать аналогичный тест но с использованием Observable
.
У вас в тесте логика завязана на обработке объекта Response
. Адаптер Retrofit2 для RxJava2 может возвращать как Observable<T>
, так и Observable<Response<T>>
. Второй случай больше похож на ваш, тогда тип возвращаемого значения из api будет Observable<Response<List<GroupObject>>>
или Single<Response<List<GroupObject>>>
, тут уж как удобнее. Для тестирования реактивных источников можно воспользоваться специальным классом TestObserver
, тогда тест может выглядеть примерно так:
TestObserver<Response<List<GroupObject>>> testObserver = TestObserver.create();
groupApi.getGroups().subscribe(testObserver);
testObserver.assertNoErrors();
testObserver.assertComplete();
assertTrue(testObserver.valueCount() > 0);
Response<List<GroupObject>> getResponse = testObserver.values().get(0);
List<GroupObject> all = getResponse.body();
assertEquals("Request successful", 200, getResponse.code());
PS В своем ответе я помогаю с написанием аналогичного теста, который использует автор, за корректность такого рода тестов я не отвечаю. =)
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Я только недавно натолкнулся на этот термин, и я не понимаю для чего они нужны и когда использовать
С выходом новой версии Spring 5 появился модуль WebFlux(реактивный подход)В документации в пункте 23
Как сделать fail ajax запроса в контроллере,чтобы после обработать его по параметру OnFailure?