Всем привет, пишу тестовое задание на Android - разработчика, и одним из требований является написание нескольких Jnit тестов (которые я ни разу не писал).
Мое приложение реализует паттерн MVP с Moxy. Я перенес всю структуру в test, и дальше не знаю к чему приступать.
Например, есть в Presenter метод для получения result с api
public void getResults(String textSearch){
mCompositeDisposable.add(ApiUtils.getApi()
.getResponse(textSearch)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.doOnSubscribe(disposable -> mView.showRefresh())
.doFinally(() -> mView.hideRefresh())
.subscribe(
response -> {
mView.showResults(response.getResults());
},
throwable -> mView.showError()
));
}
Что тут нужно тестировать? Придет результат не того типа? Ну провалится от в ветку throwable и все.
Ссылка на приложение
Что нужно тестировать ? Ответ прост - работу данного метода.
Выделяем, только работу данного метода - он получает параметр textSearch
, отдает его вовне и как результат получает response
или throwable
, которые производят соответствующие реакции у mView
.
Сам тест прост, однако сама инфраструктура теста сложная (к примеру это можно тестировать с помощью библиотеки Mockito). Нужно сделать несколько моков:
getResults
mCompositeDisposable
ApiUtils.getApi()
(не знаю что оно собой представляет)mView
Возможно, что-то придется отрефакторить. Суть сводиться к тому, чтобы измениться поведение всех методов внешних, по отношению к тестируемому методу, объектов. Моки позволяют делать так, что например, вызов ApiUtils.getApi().getResponse(textSearch)
на самом деле ничего не будет делать, а вернет готовый response
объект / или throwable
(в зависимости от того, что хотим проверить - или отработало или ошибка), а mCompositeDisposable.add()
ничего никуда добавлять не будет, а просто имитирует это действие также все методы mView
ничего не будут делать, важен лишь сам факт, они были вызваны или были вызваны с конкретным параметром(ами).
Таким образом, все сводится к паре тестов (довольно длинных):
getResults
с каким-то значение (неважно с каким),
вернулся response и как факт корректной работы были вызваны методы
mView
showRefresh
, hideRefresh
, showResults
(c конкретным значением
response.getResults()
)getResults
с каким-то значение (неважно с каким), вернулся throwable
и как факт корректной работы были вызваны методы mView
showRefresh
, hideRefresh
, showError
.Я, конечно, могу сильно заблуждаться в правильности такого подхода, но я вижу его вполне разумным. Собственно, все вышеописанное выглядит какой-то магией на первый взгляд, но если почитать документацию к Moсkito, которая очень короткая и четко все описывающая, то все встанет на свои места, ну и неделя на вникание/пробование потребуется. Удачи )
Виртуальный выделенный сервер (VDS) становится отличным выбором
Если ли какая нибудь возможность в webkit выводить определенные элементы/блоки со страницы сайта, работоспособныеНапример, есть мобильная...
У вас применен шаблон Builder и шаблон Fluent Interface
Хочу использовать AlarmManager, для того, чтобы приложение делало определенные действия в полночь (запись в бд), но не могу сконструировать простое...