2. Для менеджеров.
- Нужно найти специалистов по автоматизированному
тестированию или выучить существующих
разработчиков.
+ Разработчики, покрывающие код тестами, никогда не
вернуться к грехам прошлого
+ Точность сроков сдачи повышается с качеством кода.
- Около 40% времени нужно добавить на написание и
поддержку тестов.
+ Большая часть времени ручного тестирования и
исправления багов убирается.
3. Для разработчиков. Преимущества.
● Вы пишите чистый код на чистой, модульной, слабо-
связной архитектуре.
● Повышается ваша уверенность в правильной работе
вашего кода.
● Описывая тестовые кейсы, вы структурируете в
голове и в IDE работу вашего модуля.
● Легче разобраться, что делает тот или иной модуль,
всегда можно посмотреть тесты для него.
4. История тестирования. Что можно было вчера.
● JUnit 3 тесты, которые прогоняются на устройстве.
● Monkey и MonkeyRunner. Предки Espresso.
● Roboelectric. Переход на локальную JVM.
● Robotium. Полноценные автоматизированные тесты
UI.
5. История тестирования. Espresso. Преимущества.
Espresso по сравнению с Robotium:
● Более читабельное и удобное для расширений API
● Меньшая завязанность на Android фреймворке
● Быстрота выполнения
● Легкочитаемые ошибки
● Синхронизация в много-поточном приложении
6. История тестирования. Testing support library.
http://developer.android.com/intl/ru/tools/testing-support-library/index.html
8. MVP. Конкретнее некуда
● Вы можете не следовать S.O.L.I.D.
● Вы можете не отделять полностью слои и делать
вертикальную архитектуру
● Вы можете даже не внедрять Dependency Injection
● Но вы должны отделять вашу бизнес логику от UI.
10. MVP. Presenter, ты наше все.
● Не держите ничего зависимого от контекста в классе
Presenter.
● Покрывайте каждый метод тестами.
● Мокайте внешние зависимости и утилиты, зависимые
от Android SDK и контекста.
12. Test Driven Development.
● Вы пишете тест для вашего метода, в котором нет
обращений к Android SDK.
● Он выполняется на JVM мгновенно.
● Пока вы пишете тест, вы формализуете в голове, как
должен работать ваш метод, моделируете
нормальное поведение и поведение в граничных
условиях.
● Вы пишите чисто, разбиваете на большее число
методов и уверены в каждом из них, благодаря
высокой степени покрытия.
14. Мокирование.
● Mockito - для подмены ответов при вызовах методов
мокируемого класса и проверки, что методы
мокируемого класса были вызваны.
● PowerMock - для работы с приватными и статичными
полями и методами.
● OkHttpMockServer - для мокирования обращений к
серверу при использовании OkHttp в качестве http-
клиента.
20. Автоматическое тестирование.
Мы не пишем ни одного теста, сценария, скрипта.
Тестовый фреймворк сам нажимает на различные кнопки
и переходит между экранами. Создает скриншоты,
замеряет производительности на разных окружениях.
● NimbleDroid - бесплатный сервис, загрузив в него apk
мы смотрим результаты запуска нашего приложения и
прохода по его экранам.
22. Google Cloud Test Lab
Стоит денег, но при этом позволяет:
● осуществлять автоматическое тестирование на
реальных девайсах через облако,
● запускать из Android Studio/консоли/CI любые
тесты на реальных устройствах через облако,
● просматривать результаты тестов в том числе со
скриншотами с реальных устройств на различных
конфигурациях.
36. UI тестирование. Тесты на разных экранах.
Espresso - только для одного Activity! В нем не стоит
тестировать переходы.
Для проверки переходов и взаимодействия с другими
приложениями - UI Automator!
http://d.android.com/
intl/ru/tools/
testing-support-library/
40. Задание на дом.
Сегодня написать новую Activity, выделив Presenter и покрыть
его тестами.
Завтра написать тест, проверяющий работу UI с помощью
Espresso.
На следующей неделе добавить в CI запуск всех тестов.
...