Как сделать тест на андроиде
8 лучших приложений для диагностики Android-смартфона
– Эх, собирался купить смартфон, а получил кота 🙁
– Где были твои глаза?
– Да с виду-то он целый, только нерабочим оказался. Не знал, как его проверить, вот и купил «кота в мешке».
Ситуация досадная, но вполне обычная, когда бывший чьим-то мобильник переходит к новому владельцу. Не хотите стать жертвой обмана? Тогда тестируйте девайс перед покупкой.
В сегодняшнем обзоре – 8 лучших приложений для диагностики Android-смартфонов. Они помогут вам узнать, что представляет собой устройство, проверить его исправность и оценить работу каждой функции. Пара минут – и все нужные сведения как на ладони.
AIDA64
Аида отображает полную детализированную информацию об аппаратной и программной начинке девайса, выводит показания датчиков, данные о подключении к сетям и многое другое.
В приложении 13 основных разделов:
Однако мобильная Aida64 не имеет в составе инструментов нагрузочного тестирования и бенчмаркинга. Полученные данные она отображает в виде списков и числовых показателей, понимать которые должен сам пользователь. То есть рассчитана на опытных.
Phone Doctor Plus
В числе его возможностей:
Рабочая область Phone Doctor Plus состоит из четырех основных вкладок:
Утилита не собирает столь подробных сведений о каждой детали, как Aida64, а только тестирует функционал. Для проведения теста пользователь должен выполнить инструкции, которые видит на экране.
Phone Check
Phone Check (Mobile Phone Checker / Tester & Info) совмещает в себе функции Аиды и Доктора: отображает подробные сведения об аппарате и проверяет его работоспособность. Всего в приложении 11 диагностических тестов:
И 2 режима тестирования – простой и подробный. Тесты запускаются последовательно – один за другим. У пользователя есть возможность пропускать отдельные тесты или их этапы.
Помимо оценки функциональности, Phone Check отображает информацию о текущем использовании устройства – загрузке процессора, памяти, сети, заряде аккумулятора, а также общие сведения о системе.
Device Checker *SAM*
Утилита Device Checker *SAM* (Phone and tablet testing) разработана для диагностики смартфонов и планшетов Samsung, однако исправно выполняет свои задачи и на устройствах других марок. За исключением определения подлинности аппарата – эти функции доступны только владельцам Самсунгов. Зато остальное – 20 с лишним тестов, могут использовать все.
Как показал опыт, на телефоне «НЕ Самсунг» Device Checker *SAM* выдает вполне достоверные результаты – такие же, как рассмотренные выше утилиты-конкуренты. А единственное, что может вызвать затруднение у некоторых юзеров, – это англоязычный интерфейс приложения.
Device Checker *SAM* тестирует следующие компоненты и функции:
Последний тест – информация об устройстве, оказался самым неинформативным. Видимо, он тоже предназначен только для Самсунгов.
PhDoctor
При работе с PhDoctor некоторые пользователи столкнутся с такой же проблемой, что и в Device Checker *SAM* – он тоже страдает отсутствием русского языка.
Прочие функции и возможности PhDoctor:
Тестирование Android
Столь прямолинейное название точно не даст перепутать это приложение с чем-либо другим. Да, « Тестирование Android » именно это и делает. Но не только. Кроме 30-ти различных тестов, оно содержит инструменты сбора информации о системе и несколько полезных «приколюшек» – сканер QR-кодов, измеритель громкости звука, горизонтальный уровень и кнопку быстрого включения фонарика.
Интерфейс утилиты так же прост, как и название. Функциональные кнопки сгруппированы по назначению:
«Тестирование Android» может запускаться на смартфонах, планшетах и смарт-часах. Производитель заявляет, что оно оптимизировано для Android 9.0 и некоторых устройств марки Samsung, LG, Huawei, HTC, Google Pixel, Sony Xperia и Nokia.
Phone Doctor For Android
Функции «Доктора №2» поделены на 4 группы: «Датчики» (Sensors), «Железо» (Hardware), «Хранилище и оперативная память» (Storage Information) и «Сеть и Wi-Fi» (Network & WiFi).
AnTuTu Benchmark
Согласитесь, без AnTuTu Benchmark обзор приложений для диагностики Андроид-гаджетов был бы неполным. Ведь это, пожалуй, самое популярное в мире средство сравнительного тестирования производительности мобильных устройств.
По итогам каждого теста смартфон получает баллы (иногда их называют «попугаями»), которые затем суммируются и формируют общий показатель AnTuTu. Этим показателем и принято мериться.
Кроме того, AnTuTu Benchmark собирает общие сведения о системе и отдельных ее составляющих – сенсорах, экране, батарее, тачскрине, HTML 5 в браузере, а также проводит стресс-тесты на стабильность.
Какое из восьми приложений самое лучшее? Наверное, то где больше функций и удобней интерфейс. Чаще всего так и есть, но бывают исключения. Ведь не существует программ, которые корректно работают абсолютно на всех устройствах. Поэтому лучшим для вас будет то, что больше всего «по душе» и «по зубам» вашему смартфону.
Как создать андроид-приложение для экзамена, викторины, опроса или тестов
Продвинутый курс по разработке android-приложения QuizApp
В этом Продвинутом курсе вы узнаете, как создать андроид приложение викторину, экзамен, опрос или тест самостоятельно, даже без знания программирования. В курсе содержится пошаговая инструкция по разработке приложения, внедрению рекламных баннеров AdMob (всех типов: стандартные баннеры, межстраничные и с вознаграждением), добавлению товаров и подписок для продажи через InAppBilling, и публикации приложения в Google Play. Пример приложения из данного курса можно загрузить по ссылке.
Чему вы научитесь в этом курсе?
В этом курсе вы сможете создать мобильное андроид-приложение QuizApp для экзамена, викторины, опроса или тестов. После прохождения курса вы будете знать:
По итогам прохождения курса вы научитесь создавать android-приложения на языке java в среде разработки Android Studio. Узнаете, как реализовать приложение-викторину, экзамен, тест или опрос с выводом результатов в виде наглядной диаграммы. Как настроить push-уведомления Firebase Cloud Messaging для оповещения пользователей. Также вы сможете монетизировать приложение за счет рекламы и внутренних покупок в приложении. Готовое приложение вы сможете опубликовать в маркете Google Play.
Какой функционал приложения?
Приложение представляет собой тест, экзамен, опрос или викторину в формате вопросов с вариантами ответов. Количество неправильных ответов может быть ограничено.
Имеется возможность давать пользователю дополнительные попытки как вознаграждение за просмотр рекламы. Результаты выводятся в формате диаграммы, есть возможность шаринга результатов через другие приложения или соцсети.
Отключение рекламы, а также доступ к некоторым тестам может быть открыт через подписку или покупки в приложении. Также в приложении есть возможность оповещения пользователей посредством push-уведомлений.
Монетизация приложения реализована с помощью рекламных баннеров всех типов: стандартные баннеры на всех экранах, межстраничные баннеры и и объявления с вознаграждением за просмотр. Еще один вариант монетизации — отключение рекламы и открытие тестов с ограниченным доступом через In-app Billing (покупки и подписки в приложении).
Приложение разрабатывается в соответствии с требованиями Material Design. Навигация по приложению реализована через меню Navigation Drawer, пункты которого содержат переходы по внутренним экранам приложения, а также открытие ссылок на сообщества в соцсетях.
Подробнее ознакомиться с примером приложения из данного курса можно по ссылке в Google Play.
Кому подойдет курс?
Курс подойдет как начинающим, так и более опытным разработчикам. Можно просто пошагово создать приложение без знаний программирования, используя исходный код проекта. Но если вы уже обладаете некоторыми знаниями, полученными на нашем канале, то этот курс поможет их закрепить, и дополнительно вы сможете самостоятельно создать android-приложение для экзамена, викторины, опроса или тестов.
В каком формате курс?
Продвинутый курс по разработке андроид-приложения QuizApp будет опубликован в закрытом доступе на нашем сайте, в формате видеоурок + текстовый урок + исходный код + поддержка (вопросы — ответы в комментариях). Доступ к урокам будут иметь только подписчики курса. Срок доступа неограничен.
Как записаться на курс?
Воспользуйтесь кнопкой ниже для перехода на страницу оплаты. После оплаты отправьте через форму обратной связи сообщение с темой «Подписка на курс QuizApp». В сообщении укажите email, на который будут отправлены данные для доступа.
Тестирование Android приложений
Тестирование — одна из важнейших частей разработки качественных программных продуктов. Сегодня мы поговорим о некоторых методологиях и библиотеках, разработанных и используемых нашей командой для написания тестов Android приложений.
Начнем с самых базовых вещей, потому более опытные разработчики могут перейти сразу к разделу об инструментах для UI тестирования. Для тех, кому хочется узнать или освежить базовые вещи — приятного чтения.
Создание первого теста
Создадим небольшой компонент, который и будем тестировать. Он парсит файл с JSON объектом, содержащим имя, и возвращает полученную строку:
Тут и в дальнейшем я буду приводить сокращенную версию кода. Полную версию можно посмотреть в репозитории. К каждому сниппету будет приложена ссылка на полный код.
Библиотеки для написания тестов
Тесты — это тоже код, который надо поддерживать. Более того, код тестов должен быть прост для понимания, чтобы его можно было верифицировать в уме. Потому есть смысл инвестировать в упрощение кода тестов, избавление от дублирования и повышение читабельности. Посмотрим на широко используемые библиотеки, которые помогут нам в этом деле.
С этим правилом класс с тестом будет выглядеть следующим образом:
Теперь в каждом тесте директория будет создаваться перед созданием файла и удаляться после удаления файла.
Google Truth — это библиотека для улучшения читабельности кода тестов. Содержит методы assert (аналогично JUnit Assert), но более читабельные для человека, а также включает гораздо больше вариантов для проверки параметров. Так выглядит предыдущий тест с использование Truth:
Видно, что код читается почти как текст на разговорном английском языке.
Наш компонент делает две разных работы: читает файл и парсит его. Чтобы придерживаться принципа единственной ответственности, давайте выделим логику чтения файла в отдельный компонент:
Mockito — библиотека для для создания заглушек (моков) вместо реальных объектов для использования их в тестах. Некоторые действия, которые можно выполнять с помощью Mockito:
создавать заглушки для классов и интерфейсов;
проверять вызовы метода и значения передаваемые этому методу;
подключение к реальному объекту «шпиона» spy для контроля вызова методов.
Создадим мок FileReader и настроим его так, чтобы метод readFile() возвращал нужную нам строку:
Теперь не происходит никакого чтения файла. Вместо этого, мок отдает настроенное в тесте значение.
Использование моков имеет свои преимущества:
Существует более простой и удобный способ создания моков — использовать специальную аннотацию @Mock :
Есть три способа инициализировать такие моки:
Host Java VM vs Android Java VM
Android тесты можно поделить на два типа: те, что можно запускать на обычной Java VM, и те, что необходимо запускать на Android Java VM. Давайте посмотрим на оба типа тестов.
Тесты, запускаемые на обычной Java VM
Тесты для кода, не требующего работы компонентов Android API, для работы которых нужен Android-эмулятор или реальное устройство, можно запускать прямо на вашем компьютере и на любой Java-машине. Преимущественно это юнит-тесты бизнес-логики, которые тестируют изолированно отдельно взятый класс. Гораздо реже пишутся интеграционные тесты, так как далеко не всегда есть возможность создать реальные объекты классов, с которыми взаимодействует тестируемый класс.
Использование этих тестов имеет множество преимуществ:
с другой стороны, этими тестами:
Для того, чтобы была возможность использовать Android API классы в Host Java тестах, существует библиотека Robolectric, которая эмулирует среду Android и дает доступ к ее основным функциям. Однако, тестирование классов Android с Roboelectric часто работает нестабильно: нужно время, пока Robolectric будет поддерживать последнее API Android, существуют проблемы с получением ресурсов и т.д. Поэтому реальные классы почти не используются, а используются их моки для юнит-тестирования.
Для запуска тестов с помощью Roboelectric нужно установить кастомный TestRunner. В нем можно настроить версию SDK (самая последняя стабильная версия — 23), обозначить основной класс Application и другие параметры для эмулированной среды Android.
Тесты, запускаемые на Android Java VM
Для инструментальных тестов наличие устройства или эмулятора обязательно, так как мы будем тестировать нажатие кнопок, ввод текста, и другие действия.
UI тесты
Для тестирования UI используется фреймворк Espresso, который предоставляет API для тестирования пользовательского интерфейса программы. В Espresso тесты работают в бэкграунд потоке, а взаимодействие с UI элементами в потоке UI. Espresso имеет несколько основных классов для тестирования:
Первый UI тест
Напишем простейшее Android-приложение, которое и будем тестировать:
Протестируем наше приложение. При тестировании UI прежде всего нужно запустить Activity. Для этого существует ActivityTestRule, которое запускает Activity перед каждым тестом и закрывает после:
Напишем простой тест, проверяющий, что элемент с id R.id.container показан на экране:
Разблокировка и включение экрана
Используя это правило вместо стандартного можно сильно снизить число случайных падений UI тестов в CI.
Тестирование фрагментов
Обычно верстка и логика UI приложения не кладется вся в активити, а разбивается на окна, для каждого из которых создается фрагмент. Давайте создадим простой фрагмент для вывода на экран имени с помощью NameRepository :
При открытии фрагмента UI может зависнуть на некоторое время, а если используются анимации переходов между фрагментами, тест может начаться до появления фрагмента. Поэтому нужно не просто открыть фрагмент, а дождаться, когда он будет запущен. Для ожидания результата выполнения действий отлично подходит библиотека Awaitility, которая имеет очень простой и понятный синтаксис. Напишем правило, запускающее фрагмент и ожидающее его запуска с помощью этой библиотеки:
В данном случае выражение означает, что если в течении пяти секунд фрагмент не запустится, то тест не будет пройден. Нужно отметить, что как только фрагмент запустится, тест сразу же продолжит выполнение и не будет ждать все пять секунд.
Аналогично правилу, которое запускает активити, логично создать правило, которое запускает фрагмент:
Тест фрагмента с использованием этого правила будет выглядеть следующим образом:
Асинхронная загрузка данных во фрагментах
Так как операции с диском, а именно получение имени из файла, может выполняться сравнительно долго, то следует эту операцию выполнять асинхронно. Для асинхронного получения имени из файла используем библиотеку RxJava. Можно уверенно сказать, что RxJava сейчас используется в большинстве Android приложений. Практически каждая задача, которую нужно выполнить асинхронно, выполняется с помощью RxJava, потому что это пожалуй одна из самых удобных и понятных библиотек для асинхронного выполнения кода.
Изменим наш репозиторий так, чтобы он работал асинхронно:
Обновим наш фрагмент, используя новый реактивный репозиторий:
Так как теперь имя получается асинхронно, то для проверки результата работы нужно дождаться завершения асинхронного действия с помощью Awaitility:
Для тестирования подобных ошибок, связанных с асинхронными действиям во фрагменте, нужно закрыть фрагмент сразу же после его открытия. Это можно сделать просто заменив его на другой фрагмент. Тогда при завершении асинхронного действия onCreateView в закрытом фрагменте textView будет null и если допустить ошибку и не отменить подписку, приложение упадет. Напишем правило для тестирования на эту ошибку:
Добавим это правило в класс тестов фрагмента:
Теперь тест упадет, если асинхронные действия будут обращаться к полям фрагмента после его завершения.
Юнит-тестирование Rx кода
Создадим презентер, куда мы вынесем логику подписки на возвращаемый репозиторием Observable из фрагмента, а также добавим timeout для получения имени из файла:
В данном случае при тестировании презентера уже нужно протестировать конечный результат подписки, которая получает данные асинхронно. Напишем наивную версию такого теста:
Тест презентера с новым правилом будет выглядеть следующим образом:
Тестирование кода, использующего Dagger 2
Для облегчения работы с графом зависимостей объектов отлично подходит паттерн Dependency Injection. Dagger 2 — это библиотека, которая поможет в реализации этого паттерна. Поэтому в большинстве наших Android приложений все компоненты предоставляются с помощью Dagger. Об использовании и преимуществах этой библиотеки можно написать отдельную статью, а тут мы рассмотрим, как тестировать приложения, её использующие.
Также создадим Dagger модуль, который будет предоставлять репозиторий:
Изменим фрагмент следующим образом, чтобы репозиторий получать с помощью Dagger:
Помимо функциональных тестов UI хорошо иметь и unit-тесты с замоканными зависимостями. Чтобы предоставлять мокированные объекты с помощью Dagger, нужно заменить ApplicationComponent на специально созданный компонент для тестов. В первую очередь создадим метод для подмены основного компонента в Application :
Чтобы не заменять компонент в каждом классе с тестами фрагментов, создадим для этого правило:
Отметим, что нужно вернуть оригинальный компонент после теста, так как Application создается один для всех тестов и стоит возвращать его к дефолтному состоянию после каждого. Теперь создадим правило, которое будет проводить все подготовки к тестированию фрагмента описанные выше. Перед каждым тестом будет разблокирован экран, запущено активити, открыт нужный нам фрагмент и установлен тестовый Dagger компонент, предоставляющий моки зависимостей.
Установим тестовый компонент в тесте нашего фрагмента:
Тесты запускаемые только для Debug приложения
Бывает, что необходимо добавить логику иди элементы UI, которые нужны разработчикам для более удобного тестирования и должны отображаться только если приложение собирается в режиме debug. Давайте для примера сделаем, чтобы в debug сборке презентер не только передавал имя подписчику, но и выводил его в лог:
Тест с этим правилом будет выглядеть следующим образом:
Заключение
В этой статье мы разобрались с базовыми библиотеками для написания тестов и разработали набор инструментов, основанных на TestRule и предназначенных для решения проблем запуска активити и фрагментов, работой с асинхронным кодом, даггером, отладочным кодом и эмулятором андроида. Применение этих инструментов позволило протестировать неочевидные проблемы, снизить дублирование кода и в целом повысить читабельность тестов.
Полный пример приложения и тестов, использующих все вышеперечисленные библиотеки и утилиты.