Upload
it-people
View
401
Download
1
Embed Size (px)
Citation preview
Можно. Нужно. Пора осуществить.
Денис НеклюдовGoogle Developer Expert
Для менеджеров.
- Нужно найти специалистов по автоматизированному тестированию или выучить существующих разработчиков.
+ Разработчики, покрывающие код тестами, никогда не вернуться к грехам прошлого
+ Точность сроков сдачи повышается с качеством кода.
- Около 40% времени нужно добавить на написание и поддержку тестов.
+ Большая часть времени ручного тестирования и исправления багов убирается.
Для разработчиков. Преимущества.
● Вы пишите чистый код на чистой, модульной, слабо-связной архитектуре.
● Повышается ваша уверенность в правильной работе вашего кода.
● Описывая тестовые кейсы, вы структурируете в голове и в IDE работу вашего модуля.
● Легче разобраться, что делает тот или иной модуль, всегда можно посмотреть тесты для него.
История тестирования. Что можно было вчера.
● JUnit 3 тесты, которые прогоняются на устройстве.
● Monkey и MonkeyRunner. Предки Espresso.
● Roboelectric. Переход на локальную JVM.
● Robotium. Полноценные автоматизированные тесты UI.
История тестирования. Espresso. Преимущества.
Espresso по сравнению с Robotium:
● Более читабельное и удобное для расширений API
● Меньшая завязанность на Android фреймворке
● Быстрота выполнения
● Легкочитаемые ошибки
● Синхронизация в много-поточном приложении
История тестирования. Testing support library.
http://developer.android.com/intl/ru/tools/testing-support-library/index.html
MVP. Конкретнее некуда
● Вы можете не следовать S.O.L.I.D.
● Вы можете не отделять полностью слои и делать вертикальную архитектуру
● Вы можете даже не внедрять Dependency Injection
● Но вы должны отделять вашу бизнес логику от UI.
http://www.tinmegali.com/
MVP. Presenter, ты наше все.
● Не держите ничего зависимого от контекста в классе Presenter.
● Покрывайте каждый метод тестами.
● Мокайте внешние зависимости и утилиты, зависимые от Android SDK и контекста.
Test Driven Development.
● Вы пишете тест для вашего метода, в котором нет обращений к Android SDK.
● Он выполняется на JVM мгновенно.
● Пока вы пишете тест, вы формализуете в голове, как должен работать ваш метод, моделируете нормальное поведение и поведение в граничных условиях.
● Вы пишите чисто, разбиваете на большее число методов и уверены в каждом из них, благодаря высокой степени покрытия.
Мокирование.
Мокирование.
● Mockito - для подмены ответов при вызовах методов мокируемого класса и проверки, что методы мокируемого класса были вызваны.
● PowerMock - для работы с приватными и статичными полями и методами.
● OkHttpMockServer - для мокирования обращений к серверу при использовании OkHttp в качестве http-клиента.
Mockito. Пример.
PowerMock.
OkHttpMockServer. Пример. Инициализация.
OkHttpMockServer. Пример. Тест.
Автоматическое тестирование.
Автоматическое тестирование.
Мы не пишем ни одного теста, сценария, скрипта. Тестовый фреймворк сам нажимает на различные кнопки и переходит между экранами. Создает скриншоты, замеряет производительности на разных окружениях.
● NimbleDroid - бесплатный сервис, загрузив в него apk мы смотрим результаты запуска нашего приложения и прохода по его экранам.
Google Cloud Test Lab
Google Cloud Test Lab
Стоит денег, но при этом позволяет:
● осуществлять автоматическое тестирование на реальных девайсах через облако,
● запускать из Android Studio/консоли/CI любые тесты на реальных устройствах через облако,
● просматривать результаты тестов в том числе со скриншотами с реальных устройств на различных конфигурациях.
Espresso. Простая проверка.
https://github.com/chiuki/espresso-samples
Поиск нужного view в иерархии. HierarchyViewer
Поиск нужного view в иерархии. Scalpel
Espresso. Проверка интента.
https://google.github.io/android-testing-support-library/docs/espresso/intents/index.html
Espresso. Работа с ListView
https://github.com/chiuki/espresso-samples
Espresso. Проверка кастомного View.
https://github.com/chiuki/espresso-samples
Espresso. Работа с RecyclerView
https://github.com/chiuki/espresso-samples
Espresso. Шпаргалка
https://google.github.io/android-testing-support-library/docs/espresso/cheatsheet/index.html
Espresso. Синхронизация тестов с потоками.
Espresso. Синхронизация тестов с потоками.
Espresso. Синхронизация тестов с потоками.
Espresso. Синхронизация тестов с потоками.
Espresso. Синхронизация тестов с потоками.
UI тестирование. Тесты на разных экранах.
Espresso - только для одного Activity! В нем не стоит тестировать переходы.
Для проверки переходов и взаимодействия с другими приложениями - UI Automator!
http://d.android.com/intl/ru/tools/testing-support-library/
CI и тестирование.
./gradlew assembleTest
//добавить скриншот с результатами тестов
CI и тестирование.
./gradlew assembleAndroidTest
CI и тестирование.
./gradlew spoon
Задание на дом.
Сегодня написать новую Activity, выделив Presenter и покрыть его тестами.
Завтра написать тест, проверяющий работу UI с помощью Espresso.
На следующей неделе добавить в CI запуск всех тестов.
...