В этом разделе представлен обзор того, что такое android-espresso, и почему разработчик может захотеть его использовать.
Следует также упомянуть о любых крупных предметах в андроид-эспрессо и ссылки на связанные темы. Поскольку Documentation for android-espresso является новым, вам может потребоваться создать начальные версии этих связанных тем.
Настройка тестовой среды
Чтобы избежать взлома, мы настоятельно рекомендуем отключить системные анимации на виртуальном или физическом устройстве (устройствах), используемом для тестирования.
На вашем устройстве в разделе «Настройки-> параметры разработчика» отключите следующие 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
/**
* @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.pay))
onView(withText("Pay"))
onView(withText(R.string.pay))
Это учебное пособие по созданию примера приветствия: используется для этого примера: 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
. Затем этот тест выполняет три функции:
ActivityTestRule в верхней части определяет, какая активность протестирована и запускает ее в начале теста. (Вы также можете включить автоматический запуск активности и вместо этого запустить его внутри каждого теста вручную)
Правила тестирования довольно просты:
onView(withId(R.id.textView))
просматривает представление внутри текущего экрана по идентификатору представления внутри нашего файла макета activity_main
. .check(matches(withText("")));
затем выполняет тестовый пример на этом представлении. .perform(click())
выполняет действие над представлением: эти действия могут быть кликами, длинными щелчками или щелчками или еще одним. Это было учебное пособие для начинающих с андроид-эспрессо-инструментальных тестов, я надеюсь, что он дал вам некоторые идеи!
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