android-espresso учебник
Начало работы с android-espresso
Поиск…
замечания
В этом разделе представлен обзор того, что такое android-espresso, и почему разработчик может захотеть его использовать.
Следует также упомянуть о любых крупных предметах в андроид-эспрессо и ссылки на связанные темы. Поскольку Documentation for android-espresso является новым, вам может потребоваться создать начальные версии этих связанных тем.
Инструкции по настройке эспрессо
- Настройка тестовой среды
- Загрузить Espresso
- Установите контрольно-измерительный прибор
- Пример файла build.gradle
- аналитика
- Добавьте первый тест
- Запуск тестов В этом руководстве описывается установка Espresso с помощью диспетчера SDK и его создание с использованием Gradle. Рекомендуется использовать Android Studio.
Настройка тестовой среды
Чтобы избежать взлома, мы настоятельно рекомендуем отключить системные анимации на виртуальном или физическом устройстве (устройствах), используемом для тестирования.
На вашем устройстве в разделе «Настройки-> параметры разработчика» отключите следующие 3 настройки:
- Шкала оконной анимации
- Шкала анимации перехода
- Продолжительность анимации
Загрузить Espresso
Убедитесь, что вы установили последний репозиторий поддержки Android в разделе «Дополнительно» (см. Инструкции).
Откройте файл build.gradle вашего приложения. Обычно это не файл build.gradle верхнего уровня, а app / build.gradle.
Добавьте следующие строки внутри зависимостей:
androidTestCompile 'com.android.support.test.espresso: espresso-core: 2.2.2' androidTestCompile 'com.android.support.test: runner: 0.5'
См. Раздел загрузки для более артефактов (espresso-contrib, espresso-web и т. Д.).
Установите контрольно-измерительный прибор
Добавьте к тому же build.gradle файл следующую строку в файле android.defaultConfig: testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" Пример файла build.gradle
apply plugin: 'com.android.application'
android {
compileSdkVersion 22
buildToolsVersion "22"
defaultConfig {
applicationId "com.my.awesome.app"
minSdkVersion 10
targetSdkVersion 22.0.1
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
}
dependencies {
// App's dependencies, including test
compile 'com.android.support:support-annotations:22.2.0'
// Testing-only dependencies
androidTestCompile 'com.android.support.test:runner:0.5'
androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.2'
}
аналитика
Чтобы убедиться, что мы находимся на правильном пути с каждой новой версией, тестовый бегун собирает аналитику. Более конкретно, он загружает хэш имени пакета тестируемого приложения для каждого вызова. Это позволяет нам измерять количество уникальных пакетов с использованием Espresso, а также объем использования.
Если вы не хотите загружать эти данные, вы можете отказаться, передав тестовому бегущему следующий аргумент: disableAnalytics «true» (см., Как передавать пользовательские аргументы).
Добавьте первый тест
Android Studio создает тесты по умолчанию в src / androidTest / java / com.example.package /
Пример теста JUnit4 с использованием правил:
@RunWith(AndroidJUnit4.class)
@LargeTest
public class HelloWorldEspressoTest {
@Rule
public ActivityTestRule<MainActivity> mActivityRule = new ActivityTestRule(MainActivity.class);
@Test
public void listGoesOverTheFold() {
onView(withText("Hello world!")).check(matches(isDisplayed()));
}
}
Тестирование
В Android Studio
Создание тестовой конфигурации
В Android Studio:
Открыть меню «Выполнить» -> «Изменить конфигурации»
Добавить новую конфигурацию Android Tests
Выберите модуль
Добавьте специальный измерительный прибор:
android.support.test.runner.AndroidJUnitRunner
Запустите вновь созданную конфигурацию.
Из командной строки через Gradle
казнить
./gradlew connectedAndroidTest
Espresso имеет в основном три компонента:
ViewMatchers - позволяет находить представление в текущей иерархии представлений
ViewActions - позволяет выполнять действия над представлениями
ViewAssertions - позволяет утверждать состояние представления
Базовый тест эспрессо
onView(ViewMatcher) -- 1
.perform(ViewAction) -- 2
.check(ViewAssertion); -- 3
- Находит вид
- Выполняет действие в представлении
- Проверяет утверждение
Проверка пунктов меню опций (использование Spoon to taake screenshots)
/**
* @author piotrek1543
*
* This example provides a specific UI testing problem and how it is already solved
* with Google's Espresso. Notice that I used also Spoon framework, as Espresso
* lacks of taking screenshots functionality.
*/
@RunWith(AndroidJUnit4.class)
public class MainActivityAndroidTest {
@Rule
public ActivityTestRule<MainActivity> mRule = new ActivityTestRule<>(MainActivity.class);
@Test
public void checkIfSettingsMenuItemsAreVisible() throws InterruptedException {
//open OptionsMenu to see available items
openActionBarOverflowOrOptionsMenu(mRule.getActivity());
//create a screenshot with 'options_menu' TAG
Spoon.screenshot(mRule.getActivity(), "options_menu");
//check if Settings item is Visible
onView(withText(R.string.action_settings)).check(matches(isDisplayed()));
//check if `Sort` item is Visible
onView(withText(R.string.action_sort)).check(matches(isDisplayed()));
//perform click on `Sort` OptionsMenu item
onView(withText(R.string.action_sort)).perform(click());
//create a screenshot with 'options_menu_sort' TAG
Spoon.screenshot(mRule.getActivity(), "options_menu_sort");
//check if `Sort -> By Value id` item is Visible
onView(withText(R.string.menu_sort_length)).check(matches(isDisplayed()));
//check if `Sort -> By Joke length` item is Visible
onView(withText(R.string.menu_sort_a_z)).check(matches(isDisplayed()));
}
}
Просмотр теста
onView(withId(R.id.greet_button)) // withId(R.id.my_view) is a ViewMatcher
.perform(click()) // click() is a ViewAction
.check(matches(not(isEnabled())); // matches(isEnabled()) is a ViewAssertion
Найти некоторый вид по ID
onView(withId(R.id.pay))
Найти просмотр по тексту
onView(withText("Pay"))
onView(withText(R.string.pay))
Пример Hello World Espresso
Это учебное пособие по созданию примера приветствия: используется для этого примера: Android Studio 2.3;
Чтобы начать использовать Android Studio для создания нового проекта с пустым действием. Затем добавим некоторые простые функции в приложение, которые мы можем проверить: мы добавляем кнопку, которая, когда клики отображает «Hello World» в текстовом виде.
Код операции выглядит следующим образом:
package com.example.testing.helloworld;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final TextView textView = (TextView) findViewById(R.id.textView);
findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
textView.setText("Hello World!");
}
});
}
}
А макет activity_main для этого действия выглядит так:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="" />
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Say Hello" />
</LinearLayout>
Теперь мы хотим проверить поведение этого нового созданного приложения, используя эспрессо. Как правило, код для вашего приложения сам по себе находится в main пакете, тесты модуля находятся внутри test а тесты инструментария эспрессо находятся внутри пакета androidTest . Если вы создаете новый пустой проект с Android Studio, он должен уже создать эти пакеты и классы, и он должен выглядеть так:
Чтобы начать с эспрессо, мы должны убедиться, что зависимость espresso-core включена в файл build.gradle (обратите внимание, что это не аннотация с ключевым словом compile а с помощью androidTestCompile ). Зависимости в файле build.gradle создаваемые студией Android, должны выглядеть так:
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:25.2.0'
compile 'com.android.support.constraint:constraint-layout:1.0.2'
testCompile 'junit:junit:4.12'
}
Теперь, когда все настроено, мы можем начать с фактического теста: Откройте файл ExampleInstrumentationTest и вы увидите, что внутри него уже есть один useAppContext . Мы изменим этот тестовый класс и создадим тест для проверки поведения нашего приложения:
@RunWith(AndroidJUnit4.class)
public class ExampleInstrumentedTest {
@Rule
public ActivityTestRule<MainActivity> mActivityRule = new ActivityTestRule<>(
MainActivity.class, false, true);
@Test
public void checkHelloWorld() throws Exception {
onView(withId(R.id.textView)).check(matches(withText("")));
onView(withId(R.id.button)).perform(click());
onView(withId(R.id.textView)).check(matches(withText("Hello World!")));
}
}
Запустите тест, запустив класс ExampleInstrumentedTest . Затем этот тест выполняет три функции:
- Он проверяет, содержит ли текстовое поле пустую строку ("")
- Он нажимает кнопку в нашем макете
- Он снова проверяет текст текстового поля, если он содержит «Hello World!».
ActivityTestRule в верхней части определяет, какая активность протестирована и запускает ее в начале теста. (Вы также можете включить автоматический запуск активности и вместо этого запустить его внутри каждого теста вручную)
Правила тестирования довольно просты:
-
onView(withId(R.id.textView))просматривает представление внутри текущего экрана по идентификатору представления внутри нашего файла макетаactivity_main. -
.check(matches(withText("")));затем выполняет тестовый пример на этом представлении. -
.perform(click())выполняет действие над представлением: эти действия могут быть кликами, длинными щелчками или щелчками или еще одним.
Это было учебное пособие для начинающих с андроид-эспрессо-инструментальных тестов, я надеюсь, что он дал вам некоторые идеи!
