Looking for android-espresso Answers? Try Ask4KnowledgeBase
Looking for android-espresso Keywords? Try Ask4Keywords

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 имеет в основном три компонента:

  1. ViewMatchers - позволяет находить представление в текущей иерархии представлений

  2. ViewActions - позволяет выполнять действия над представлениями

  3. ViewAssertions - позволяет утверждать состояние представления

Базовый тест эспрессо

onView(ViewMatcher)       -- 1     
 .perform(ViewAction)     -- 2
   .check(ViewAssertion); -- 3
 
  1. Находит вид
  2. Выполняет действие в представлении
  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()));
    }
}
 

Найти некоторый вид по 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 . Затем этот тест выполняет три функции:

  1. Он проверяет, содержит ли текстовое поле пустую строку ("")
  2. Он нажимает кнопку в нашем макете
  3. Он снова проверяет текст текстового поля, если он содержит «Hello World!».

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