Есть 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 В своем ответе я помогаю с написанием аналогичного теста, который использует автор, за корректность такого рода тестов я не отвечаю. =)
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники