Опубликован: 06.05.2014 | Уровень: для всех | Доступ: платный
Самостоятельная работа 3:

Основы тестирования и отладки приложений на смартфоне

< Лекция 3 || Самостоятельная работа 3: 123 || Лекция 4 >
Аннотация: Цель лабораторной работы рассмотреть инструменты для тестирования мобильных приложений, входящие в состав Android SDK.

Задачи лабораторной работы

рассмотреть создание тестирующего приложения на основе JUnit

Введение

К вопросам тестирования мобильных приложений, разработанных под Android, имеет непосредственное отношение работа с эмулятором, который позволяет тестировать приложения без привлечения реальных устройств. Android SDK позволяет создавать эмулятор и запускать его на компьютере разработчика, существует набор ключевых клавиш для управления эмулятором, таблица ключевых клавиш:

http://developer.android.com/tools/help/emulator.html

Часто необходимо тестировать поведение приложения при поступлении входящего вызова, при получении SMS, а также работу приложений использующих дополнительные возможности смартфона: камеру, приемник GPS и другие возможности. Описание работы с эмулятором:

http://developer.android.com/tools/devices/emulator.html

Среда Android тестирования основана на использовании библиотеки JUnit, поэтому необходимо иметь представление о том, как устроена эта библиотека и как с ней работать, для первичного ознакомления можно порекомендовать видео-урок:

https://www.youtube.com/watch?v=QJZb1fNYh9c&list=PLB0276A0A62BDEF06&index=17

из целого набора видео-уроков "Java для тестировщиков":

https://www.youtube.com/playlist?list=PLB0276A0A62BDEF06.

И еще информация по JUnit: http://habrahabr.ru/post/120101/.

Инструменты тестирования в Android SDK

Android SDK включает мощные инструменты для тестирования приложений. Инструменты расширяют JUnit дополнительными возможностями; предоставляют готовые к использованию классы для объектов, имитирующих Android систему; дают контроль над главным приложением во время его тестирования.

В работе используем простое Android приложение из комплекта Android SDK, для которого создадим тестирующее приложение, тем самым продемонстрируем инструменты Android тестирования, включенные в Android IDE.

Ключевые моменты тестирования в Android IDE:

  • Android тест сам является приложением, которое связано с тестируемым приложением, что отражено в его файле AndroidManifest.xml;
  • вместо Adnroid-компонентов приложение тестов содержит один или более тестовых сценариев, каждый из которых является отдельным классом;
  • классы Android тестов расширяют класс TestCase библиотеки JUnit;
  • классы Android тестов для активностей расширяют JUnit и связываются с тестируемым приложением, можно передавать события: нажатие кнопки или касания экрана напрямую в пользовательский интерфейс;
  • класс теста выбирается в соответствии с типом тестируемого компонента (приложение, активность, контент-провайдер или сервис);
  • в Eclipse/ADT существуют дополнительные инструменты, обеспечивающие интегрированную поддержку создания тест-приложения, запуска его и просмотра результатов.

Тестирующее приложение содержит методы, которые выполняют следующие тесты:

  • Тест начальных условий проверяет, что тестируемое приложение корректно инициализировано, тестируется метод onCreate(). Данный тест обеспечивает степень достоверности для последующих тестов.
  • Тест пользовательского интерфейса (UI) проверяет, что главный UI процесс работает корректно. Данный тест демонстрирует аппаратные особенности доступные в тестировании активностей, показывает, что можно автоматизировать тестирование пользовательских интерфейсов, передавая события кнопок из тест-приложения в главное приложение.
  • Тест управления состояниями демонстрирует возможности инструмента для запуска тестов, которые доступны при тестировании любого компонента.

Создание тестирующего приложения

  1. В качестве приложения для тестирования будем использовать уже готовое приложение, входящее в набор созданных разработчиками Android SDK примеров, приложение называется Spinner и содержится в наборе примеров (Samples). Мы взяли приложение из набора примеров для API 8.
    Импорт существующего Android-приложения

    увеличить изображение
    Рис. 6.1. Импорт существующего Android-приложения

    Запустите Eclipse, создайте новое Android приложение, используя уже существующее:

    New->Project...->Android->Android Project from Existing Code

    в открывшемся диалоге выберите расположение проекта, это может выглядеть примерно, как на рис. 6.1. Убедитесь, что приложение запускается и что-то выполняет. Разумеется, не обязательно тестировать именно это приложение, можно и лучше использовать для этого Ваше Android приложение.

  2. Создадим тестирующее приложение.

    В Eclipse New->Project...->Android->Android Test Project

    Задайте имя проекта, обычно имя тестирующего проекта собирается следующим образом: имя тестируемого проекта + слово Test, в нашем случае получится SpinnerActivityTest. Далее необходимо указать тестируемый проект.

    Выбор тестируемого проекта.

    Рис. 6.2. Выбор тестируемого проекта.

    Теперь у нас есть простейшее Android приложение (SpinnerActivity) и пустое тестирующее приложение (SpinnerActivityTest).

    Файл AndroidManifest.xml тестирующего приложения выглядит, как изображено на рис. 6.3. В разделе <instrumentation> указано где располагается тестируемый проект.

    Файл манифеста приложения SpinnerActivityTest

    увеличить изображение
    Рис. 6.3. Файл манифеста приложения SpinnerActivityTest
  3. Создадим класс тестов.
    Создание класса тестовых сценариев

    увеличить изображение
    Рис. 6.4. Создание класса тестовых сценариев

    В пакете, расположенном в папке src/ проекта SpinnerActivityTest, создадим новый класс. Имя класса: SpinnerActivityTest, суперкласс:

    android.test.ActivityInstrumentationTestCase2<SpinnerActivity>

    Класс ActivityInstrumentationTestCase2 спроектирован для выполнения функционального тестирования одной или нескольких активностей приложения.

    Чтобы была возможность обращаться к SpinnerActivity необходимо в файл SpinnerActivityTest.java добавить следующую строчку:

    import com.android.example.spinner.SpinnerActivity;

Добавим конструктор класса тестов:

public SpinnerActivityTest(){
super("com.android.example.spinner", SpinnerActivity.class);
}
 

Добавим метод начальных установок

Метод setUp() вызывается перед каждым тестом, используется для инициализации переменных и очистки значений после предыдущих тестов. Также можно использовать метод tearDown(), который вызывается после каждого теста, в этой лабораторной работе мы его рассматривать не будем.

Код метода:

@Override
    protected void setUp() throws Exception {
		super.setUp();
	     setActivityInitialTouchMode(false);
	     mActivity = getActivity();
	     mSpinner = (Spinner)mActivity.findViewById
(com.android.example.spinner.R.id.Spinner01);
	     mPlanetData = mSpinner.getAdapter();
	}
 

Рассмотрим метод:

  • super.setUp()— вызывает конструктор суперкласса для setUp(), как этого требует JUnit;
  • setActivityInitialTouchMode(false) – выключает режим касаний на эмуляторе и устройстве, если какой-то из ваших тестов передает события нажатия кнопок в приложение, необходимо отключать режим касаний перед запуском любой активности, иначе вызовы будут игнорироваться;
  • getActivity() – получает ссылку на тестируемую активность, этот вызов также запускает активность, если это до сих пор не сделано;
  • findViewById(int) – получает ссылку на виджет Spinner в тестируемом приложении;
  • getAdapter() – получает ссылку на адаптер (массив строк) соответствующий Spinner.

В класс тестов необходимо добавить следующие элементы:

private SpinnerActivity mActivity;

private Spinner mSpinner;

private SpinnerAdapter mPlanetData;

И импортировать следующие пакеты:

import android.widget.Spinner;

import android.widget.SpinnerAdapter;

< Лекция 3 || Самостоятельная работа 3: 123 || Лекция 4 >
Александр Коновалов
Александр Коновалов
Олег Литовка
Олег Литовка
Украина