android-espresso 튜토리얼
android-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
에스프레소에는 기본적으로 세 가지 구성 요소가 있습니다.
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.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 예제를 만드는 데 필요한 자습서입니다.이 예제에서는 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_main 의 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 않고 대신 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 클래스를 실행하여 테스트를 시작합니다. 이 테스트는 다음 세 가지 작업을 수행합니다.
- textview에 빈 문자열 ( "")이 포함되어 있는지 확인합니다.
- 레이아웃의 버튼을 클릭합니다.
- "Hello World!"가 포함 된 경우 텍스트 뷰의 텍스트를 다시 확인합니다.
ActivityTestRule 상단을 테스트하는 활동을 정의하고 테스트의 시작 부분을 실행합니다. (액티비티의 자동 시작 기능을 켜고 수동으로 각 테스트 내에서 시작할 수도 있습니다)
테스트 규칙은 매우 간단합니다.
-
onView(withId(R.id.textView))는activity_main레이아웃 파일의 뷰 ID로 현재 화면 내부의 뷰를 조회합니다. -
.check(matches(withText("")));그런 다음 해당보기에 대한 테스트 케이스를 수행합니다. -
.perform(click())은보기에 대해 작업을 수행합니다.이 작업은 클릭, 긴 클릭 또는 스 와이프 등이 될 수 있습니다.
이것은 android espresso Instrumentation 테스트로 시작하는 튜토리얼이었습니다.
