41
Можно. Нужно. Пора осуществить. Денис Неклюдов Google Developer Expert

Как сейчас тесты в Android пишут, Денис Неклюдов, Google Dev Expert, Москва

Embed Size (px)

Citation preview

Page 1: Как сейчас тесты в Android пишут, Денис Неклюдов, Google Dev Expert, Москва

Можно. Нужно. Пора осуществить.

Денис НеклюдовGoogle Developer Expert

Page 2: Как сейчас тесты в Android пишут, Денис Неклюдов, Google Dev Expert, Москва

Для менеджеров.

- Нужно найти специалистов по автоматизированному тестированию или выучить существующих разработчиков.

+ Разработчики, покрывающие код тестами, никогда не вернуться к грехам прошлого

+ Точность сроков сдачи повышается с качеством кода.

- Около 40% времени нужно добавить на написание и поддержку тестов.

+ Большая часть времени ручного тестирования и исправления багов убирается.

Page 3: Как сейчас тесты в Android пишут, Денис Неклюдов, Google Dev Expert, Москва

Для разработчиков. Преимущества.

● Вы пишите чистый код на чистой, модульной, слабо-связной архитектуре.

● Повышается ваша уверенность в правильной работе вашего кода.

● Описывая тестовые кейсы, вы структурируете в голове и в IDE работу вашего модуля.

● Легче разобраться, что делает тот или иной модуль, всегда можно посмотреть тесты для него.

Page 4: Как сейчас тесты в Android пишут, Денис Неклюдов, Google Dev Expert, Москва

История тестирования. Что можно было вчера.

● JUnit 3 тесты, которые прогоняются на устройстве.

● Monkey и MonkeyRunner. Предки Espresso.

● Roboelectric. Переход на локальную JVM.

● Robotium. Полноценные автоматизированные тесты UI.

Page 5: Как сейчас тесты в Android пишут, Денис Неклюдов, Google Dev Expert, Москва

История тестирования. Espresso. Преимущества.

Espresso по сравнению с Robotium:

● Более читабельное и удобное для расширений API

● Меньшая завязанность на Android фреймворке

● Быстрота выполнения

● Легкочитаемые ошибки

● Синхронизация в много-поточном приложении

Page 7: Как сейчас тесты в Android пишут, Денис Неклюдов, Google Dev Expert, Москва
Page 8: Как сейчас тесты в Android пишут, Денис Неклюдов, Google Dev Expert, Москва

MVP. Конкретнее некуда

● Вы можете не следовать S.O.L.I.D.

● Вы можете не отделять полностью слои и делать вертикальную архитектуру

● Вы можете даже не внедрять Dependency Injection

● Но вы должны отделять вашу бизнес логику от UI.

Page 10: Как сейчас тесты в Android пишут, Денис Неклюдов, Google Dev Expert, Москва

MVP. Presenter, ты наше все.

● Не держите ничего зависимого от контекста в классе Presenter.

● Покрывайте каждый метод тестами.

● Мокайте внешние зависимости и утилиты, зависимые от Android SDK и контекста.

Page 11: Как сейчас тесты в Android пишут, Денис Неклюдов, Google Dev Expert, Москва
Page 12: Как сейчас тесты в Android пишут, Денис Неклюдов, Google Dev Expert, Москва

Test Driven Development.

● Вы пишете тест для вашего метода, в котором нет обращений к Android SDK.

● Он выполняется на JVM мгновенно.

● Пока вы пишете тест, вы формализуете в голове, как должен работать ваш метод, моделируете нормальное поведение и поведение в граничных условиях.

● Вы пишите чисто, разбиваете на большее число методов и уверены в каждом из них, благодаря высокой степени покрытия.

Page 13: Как сейчас тесты в Android пишут, Денис Неклюдов, Google Dev Expert, Москва

Мокирование.

Page 14: Как сейчас тесты в Android пишут, Денис Неклюдов, Google Dev Expert, Москва

Мокирование.

● Mockito - для подмены ответов при вызовах методов мокируемого класса и проверки, что методы мокируемого класса были вызваны.

● PowerMock - для работы с приватными и статичными полями и методами.

● OkHttpMockServer - для мокирования обращений к серверу при использовании OkHttp в качестве http-клиента.

Page 15: Как сейчас тесты в Android пишут, Денис Неклюдов, Google Dev Expert, Москва

Mockito. Пример.

Page 16: Как сейчас тесты в Android пишут, Денис Неклюдов, Google Dev Expert, Москва

PowerMock.

Page 17: Как сейчас тесты в Android пишут, Денис Неклюдов, Google Dev Expert, Москва

OkHttpMockServer. Пример. Инициализация.

Page 18: Как сейчас тесты в Android пишут, Денис Неклюдов, Google Dev Expert, Москва

OkHttpMockServer. Пример. Тест.

Page 19: Как сейчас тесты в Android пишут, Денис Неклюдов, Google Dev Expert, Москва

Автоматическое тестирование.

Page 20: Как сейчас тесты в Android пишут, Денис Неклюдов, Google Dev Expert, Москва

Автоматическое тестирование.

Мы не пишем ни одного теста, сценария, скрипта. Тестовый фреймворк сам нажимает на различные кнопки и переходит между экранами. Создает скриншоты, замеряет производительности на разных окружениях.

● NimbleDroid - бесплатный сервис, загрузив в него apk мы смотрим результаты запуска нашего приложения и прохода по его экранам.

Page 21: Как сейчас тесты в Android пишут, Денис Неклюдов, Google Dev Expert, Москва

Google Cloud Test Lab

Page 22: Как сейчас тесты в Android пишут, Денис Неклюдов, Google Dev Expert, Москва

Google Cloud Test Lab

Стоит денег, но при этом позволяет:

● осуществлять автоматическое тестирование на реальных девайсах через облако,

● запускать из Android Studio/консоли/CI любые тесты на реальных устройствах через облако,

● просматривать результаты тестов в том числе со скриншотами с реальных устройств на различных конфигурациях.

Page 23: Как сейчас тесты в Android пишут, Денис Неклюдов, Google Dev Expert, Москва

Espresso. Простая проверка.

https://github.com/chiuki/espresso-samples

Page 24: Как сейчас тесты в Android пишут, Денис Неклюдов, Google Dev Expert, Москва

Поиск нужного view в иерархии. HierarchyViewer

Page 25: Как сейчас тесты в Android пишут, Денис Неклюдов, Google Dev Expert, Москва

Поиск нужного view в иерархии. Scalpel

Page 26: Как сейчас тесты в Android пишут, Денис Неклюдов, Google Dev Expert, Москва

Espresso. Проверка интента.

https://google.github.io/android-testing-support-library/docs/espresso/intents/index.html

Page 27: Как сейчас тесты в Android пишут, Денис Неклюдов, Google Dev Expert, Москва

Espresso. Работа с ListView

https://github.com/chiuki/espresso-samples

Page 28: Как сейчас тесты в Android пишут, Денис Неклюдов, Google Dev Expert, Москва

Espresso. Проверка кастомного View.

https://github.com/chiuki/espresso-samples

Page 29: Как сейчас тесты в Android пишут, Денис Неклюдов, Google Dev Expert, Москва

Espresso. Работа с RecyclerView

https://github.com/chiuki/espresso-samples

Page 31: Как сейчас тесты в Android пишут, Денис Неклюдов, Google Dev Expert, Москва

Espresso. Синхронизация тестов с потоками.

Page 32: Как сейчас тесты в Android пишут, Денис Неклюдов, Google Dev Expert, Москва

Espresso. Синхронизация тестов с потоками.

Page 33: Как сейчас тесты в Android пишут, Денис Неклюдов, Google Dev Expert, Москва

Espresso. Синхронизация тестов с потоками.

Page 34: Как сейчас тесты в Android пишут, Денис Неклюдов, Google Dev Expert, Москва

Espresso. Синхронизация тестов с потоками.

Page 35: Как сейчас тесты в Android пишут, Денис Неклюдов, Google Dev Expert, Москва

Espresso. Синхронизация тестов с потоками.

Page 37: Как сейчас тесты в Android пишут, Денис Неклюдов, Google Dev Expert, Москва

CI и тестирование.

./gradlew assembleTest

//добавить скриншот с результатами тестов

Page 38: Как сейчас тесты в Android пишут, Денис Неклюдов, Google Dev Expert, Москва

CI и тестирование.

./gradlew assembleAndroidTest

Page 39: Как сейчас тесты в Android пишут, Денис Неклюдов, Google Dev Expert, Москва

CI и тестирование.

./gradlew spoon

Page 40: Как сейчас тесты в Android пишут, Денис Неклюдов, Google Dev Expert, Москва

Задание на дом.

Сегодня написать новую Activity, выделив Presenter и покрыть его тестами.

Завтра написать тест, проверяющий работу UI с помощью Espresso.

На следующей неделе добавить в CI запуск всех тестов.

...

Page 41: Как сейчас тесты в Android пишут, Денис Неклюдов, Google Dev Expert, Москва