Не даем роботу падать Тестирование Android приложений Дмитрий Ситников.

Презентация:



Advertisements
Похожие презентации
Selenium: Начало.. Особенности WEB-приложений Множество браузеров, отличающиеся реализацией Отсутсвие строгих правил в HTML Различные конфигурации на.
Advertisements

Microsoft TechDays Прукс Александр
Team System - фреймворк для автоматизации тестирования от Microsoft Футорняк Елена Apriorit Сообщество Тестировщиков Днепропетровска 29/09/2011.
Егор Еремеев, Universal KUBE, 2011 Производительность комплекса систем Простой подход к разработке методики тестирования.
Организация процесса тестирования в Agile команде с помощью квадрантов тестирования.
LOGO Модульное тестирование. Виды тестов Модульные Тестируется функционал ограниченной части кода (минимум – класса) Тесты изолированы от других частей.
Framework для автоматизации тестирования и функционального мониторинга в Яндексе или Автостопом по Акве.
Тема 5. Введение в среду визуального программирования Borland Delphi 7.0.
Инструменты Visual Studio для контроля качества и безопасности кода MSSD-3 Александр Яковлев, Microsoft.
Многоуровневое мандатное управление доступом в многооконной графической среде ОС класса Linux Авторы: к.т.н., доцент Д. В. Ефанов * аспирант кафедры 36.
SQL 2012 И ГИБКИЕ МЕТОДЫ КОМАНДНОЙ РАЗРАБОТКИ C TFS Добро пожаловать в команду! Alexander Yakovlev
OpenGL и Direct3D сравнение стандартов Выполнил: Пенкин А. Группа И-204.
Система управления автоматическими тестами на базе MS VisualStudio 2008 & Hyper-V.
D7 – новая платформа разработки сайтов и порталов Тушинский Юрий Технический директор Битрикс.
Дипломная работа Выполнил: Чернилевский Денис, 518 гр. Научный руководитель: к.ф.-м.н. Луковников Иван Васильевич.
Android Comapping Продолжение студенческого проекта в Летней школе СПбГУ, Математико-Механический факультет, 2009.
РАСПРОСТРАНЕННЫЕ ОШИБКИ В ИДЕОЛОГИИ, ПЛАНИРОВАНИИ И ПРОВЕДЕНИИ ТЕСТИРОВАНИЯ 2.
Возможности NetSchool и Moodle для организации дистанционного обучения 11 сентября 2013 Осинцев А.Б. МБОУ Лицей 130.
Непрерывная интеграция Андрей Дзыня. Lohika Systems Kyiv.
Платформа разработки ASP.NET Гайдар Магдануров t: e: m: +7.
Транксрипт:

Не даем роботу падать Тестирование Android приложений Дмитрий Ситников

Инструменты Написание тестов Android unit tests Robotium Robolectric Дополнительные иснструменты Monkeyrunner UI/Application Exerciser Monkey Roboguice Android-mock …

Android unit tests Junit 3, только в профиль Использует собственный InstrumentationTestRunner Запускается на Dalvik

Android unit tests, архитектура

Основные классы AndroidTestCase – основной класс для unit тестов ActivityUnitTestCase – для тестирования в изоляции, можно внедрить свои Context и Application. ActivityInstrumentationTestCase2 – для запуска activity в нормальной среде c контекстом и объектом приложения. Context и Application нельзя заменять mock-объектами, но можно запускать любой свой Intent SingleLaunchActivityTestCase – для продолжительного тестирования одного Activity в неизменной среде, не предполагает внедрения mock-объектов ApplicationTestCase ServiceTestCase – для Unit тестов с поддержкой mock-ов ProviderTestCase

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

Robotium Как селениум, но для Android Надстройка над unit-тестами Тестирование на эмуляторе и реальных устройствах Имеет средства для –кликов –прокрутки –поиска текста Умеет искать элементы –по id –по тексту

Robotium, тонкие моменты Ищет текст только вниз от текущей позиции Не «знает» про виртуальную клавиатуру Требует отключения блокировки экрана Не умеет работать с чужими Activity Работает медленно

Robolectric Большой набор заглушек для полноценной работы на JVM Удобный механизм для тестирования Http запросов Можно использовать свои mock, DI в том числе roboguice Shadow-классы как замена mock+DI

Robolectric, shadow-классы

Robolectric, тонкие моменты Тесты Activity != UI тестам SQLite не обязательно будет работать так, как работает на устройстве Сложно тестировать системы с большим числом зависимостей Сложности со сторонними библиотеками По умолчанию логи не попадут LogCat

Приложени протестировано, в нем нет ошибок? Конечно есть!

ACRA, если все-таки упал Stack trace + дополнительные данные Не нужен Google API Не нужен Play Store Настраиваемый сервер сбора отчетов Настраиваемый набор параметров + можно получить репорт даже если ничего не упало

Тесты готовы, отчеты работают, это все? Конечно нет!

Непрерывная интеграция Для сборки – Ant/Maven Для запуска тестов – Android JUnit Report Test Runner Для скриншотов – android-screenshot- library Monkeyrunner – скриптинг запуска тестов на Python

Тесты в Syncplicity

Почему не TDD? Маленькой команде не хватало ресурсов поддерживать объем тестов, растущий пропорционально объему кода Тесты устаревали быстрее чем становились полезными Архитектура, ориентированная на тесты, хуже архитектуры, ориентированной на бизнес-задачу

Почему не TDD? Код, написанный для решения задач Код, написанный для тестов

Когда же все-таки TDD? Когда удается удержаться в рамках Black-box тестирования Когда тестируются ключевые особенности системы Когда планируется масштабный рефакторинг

Спасибо за внимание! Дмитрий Ситников fo2rist