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

android-espressoandroid-espresso 시작하기


비고

이 섹션에서는 android-espresso가 무엇인지, 왜 개발자가 그것을 사용하고 싶어하는지에 대한 개요를 제공합니다.

또한 android-espresso 내의 큰 주제를 언급하고 관련 주제에 링크해야합니다. android-espresso에 대한 문서가 새롭기 때문에 관련 주제의 초기 버전을 만들어야 할 수도 있습니다.

에스프레소 설정 지침

  • 테스트 환경 설정
  • 다운로드 에스프레소
  • 계측 주자 설정
  • 예제 build.gradle 파일
  • 해석학
  • 첫 번째 테스트 추가
  • 테스트 실행이 가이드는 SDK 관리자를 사용하여 Espresso를 설치하고 Gradle을 사용하여 빌드하는 방법을 다룹니다. Android Studio를 사용하는 것이 좋습니다.

테스트 환경 설정

지루함을 피하기 위해 테스트에 사용 된 가상 또는 실제 장치에서 시스템 애니메이션을 끄는 것이 좋습니다.

기기의 설정 -> 개발자 옵션에서 다음 3 가지 설정을 사용 중지합니다.

  • 창 애니메이션 스케일
  • 전환 애니메이션 스케일
  • 애니메이터 기간 척도

다운로드 에스프레소

  • Extras에 최신 Android 지원 리포지토리를 설치했는지 확인하십시오 (도움말 참조).

  • 앱의 build.gradle 파일을 엽니 다. 일반적으로 최상위 build.gradle 파일이 아니라 app / build.gradle입니다.

  • 종속성 내부에 다음 행을 추가하십시오.

    androidTestCompile 'com.android.support.test.espresso : 에스 프레소 코어 : 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 테스트 구성 추가

  • 모듈 선택

  • 특정 계측 러너 추가 :

    android.support.test.runner.AndroidJUnitRunner

새로 생성 된 구성을 실행합니다.

커맨드 라인에서 Gradle을 통해

실행

./gradlew connectedAndroidTest
 

에스프레소에는 기본적으로 세 가지 구성 요소가 있습니다.

  1. ViewMatchers - 현재 뷰 계층에서 뷰를 찾을 수 있습니다.

  2. ViewActions -보기에서 작업을 수행 할 수 있습니다.

  3. ViewAssertions - 뷰의 상태를 주장 할 수 있습니다.

기본 에스프레소 테스트

onView(ViewMatcher)       -- 1     
 .perform(ViewAction)     -- 2
   .check(ViewAssertion); -- 3
 
  1. 보기를 찾습니다.
  2. 뷰에서 작업 수행
  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()));
    }
}
 

ID로 일부보기 찾기

onView(withId(R.id.pay))
 

텍스트로보기 찾기

onView(withText("Pay"))
onView(withText(R.string.pay))
 

안녕하세요 세계 에스프레소 예제

이 예제에서는 hello world 예제를 만드는 데 필요한 자습서입니다.이 예제에서는 Android Studio 2.3;

Android Studio를 사용하여 빈 활동으로 새 프로젝트를 만듭니다. 그런 다음 우리가 테스트 할 수있는 간단한 기능을 App에 추가합니다. 클릭하면 텍스트 뷰에 "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_mainactivity_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 않고 대신 androidTestCompile ). Android 스튜디오에서 만든 build.gradle 파일의 종속성은 다음과 같습니다.

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. textview에 빈 문자열 ( "")이 포함되어 있는지 확인합니다.
  2. 레이아웃의 버튼을 클릭합니다.
  3. "Hello World!"가 포함 된 경우 텍스트 뷰의 텍스트를 다시 확인합니다.

ActivityTestRule 상단을 테스트하는 활동을 정의하고 테스트의 시작 부분을 실행합니다. (액티비티의 자동 시작 기능을 켜고 수동으로 각 테스트 내에서 시작할 수도 있습니다)

테스트 규칙은 매우 간단합니다.

  • onView(withId(R.id.textView))activity_main 레이아웃 파일의 뷰 ID로 현재 화면 내부의 뷰를 조회합니다.
  • .check(matches(withText(""))); 그런 다음 해당보기에 대한 테스트 케이스를 수행합니다.
  • .perform(click()) 은보기에 대해 작업을 수행합니다.이 작업은 클릭, 긴 클릭 또는 스 와이프 등이 될 수 있습니다.

이것은 android espresso Instrumentation 테스트로 시작하는 튜토리얼이었습니다.

테스트보기

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