Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 10 лет назад пользователемГеннадий Листратов
1 Не даем роботу падать Тестирование Android приложений Дмитрий Ситников
2 Инструменты Написание тестов Android unit tests Robotium Robolectric Дополнительные иснструменты Monkeyrunner UI/Application Exerciser Monkey Roboguice Android-mock …
3 Android unit tests Junit 3, только в профиль Использует собственный InstrumentationTestRunner Запускается на Dalvik
4 Android unit tests, архитектура
5 Основные классы AndroidTestCase – основной класс для unit тестов ActivityUnitTestCase – для тестирования в изоляции, можно внедрить свои Context и Application. ActivityInstrumentationTestCase2 – для запуска activity в нормальной среде c контекстом и объектом приложения. Context и Application нельзя заменять mock-объектами, но можно запускать любой свой Intent SingleLaunchActivityTestCase – для продолжительного тестирования одного Activity в неизменной среде, не предполагает внедрения mock-объектов ApplicationTestCase ServiceTestCase – для Unit тестов с поддержкой mock-ов ProviderTestCase
6 Android unit tests & Activities // Запускаем Activity mActivity = getActivity(); // Получаем объект из активити, это спинер (аналог комбо-бокса) mSpinner = (Spinner)mActivity.findViewById(com.android.example.spinner.R.id.Spinner01); // Устанавливаем спинеру позицию mActivity.setSpinnerPosition(TEST_STATE_DESTROY_POSITION); // Останавливаем Activity - Метод onDestroy() должен сохранить состояние спинера mActivity.finish(); // Рестартуем Activity - Метод onResume() должен восстановить его состояние mActivity = getActivity(); // Узнаем позицию спинера int currentPosition = mActivity.getSpinnerPosition(); // Проверяем, что она не изменилась assertEquals(TEST_STATE_DESTROY_POSITION, currentPosition); Unit тесты не запрещают тестирование Activities
7 Robotium Как селениум, но для Android Надстройка над unit-тестами Тестирование на эмуляторе и реальных устройствах Имеет средства для –кликов –прокрутки –поиска текста Умеет искать элементы –по id –по тексту
8 Robotium, тонкие моменты Ищет текст только вниз от текущей позиции Не «знает» про виртуальную клавиатуру Требует отключения блокировки экрана Не умеет работать с чужими Activity Работает медленно
9 Robolectric Большой набор заглушек для полноценной работы на JVM Удобный механизм для тестирования Http запросов Можно использовать свои mock, DI в том числе roboguice Shadow-классы как замена mock+DI
10 Robolectric, shadow-классы
12 Robolectric, тонкие моменты Тесты Activity != UI тестам SQLite не обязательно будет работать так, как работает на устройстве Сложно тестировать системы с большим числом зависимостей Сложности со сторонними библиотеками По умолчанию логи не попадут LogCat
13 Приложени протестировано, в нем нет ошибок? Конечно есть!
15 ACRA, если все-таки упал Stack trace + дополнительные данные Не нужен Google API Не нужен Play Store Настраиваемый сервер сбора отчетов Настраиваемый набор параметров + можно получить репорт даже если ничего не упало
16 Тесты готовы, отчеты работают, это все? Конечно нет!
17 Непрерывная интеграция Для сборки – Ant/Maven Для запуска тестов – Android JUnit Report Test Runner Для скриншотов – android-screenshot- library Monkeyrunner – скриптинг запуска тестов на Python
18 Тесты в Syncplicity
19 Почему не TDD? Маленькой команде не хватало ресурсов поддерживать объем тестов, растущий пропорционально объему кода Тесты устаревали быстрее чем становились полезными Архитектура, ориентированная на тесты, хуже архитектуры, ориентированной на бизнес-задачу
20 Почему не TDD? Код, написанный для решения задач Код, написанный для тестов
21 Когда же все-таки TDD? Когда удается удержаться в рамках Black-box тестирования Когда тестируются ключевые особенности системы Когда планируется масштабный рефакторинг
22 Спасибо за внимание! Дмитрий Ситников fo2rist
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.