일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 재택근무
- 소프시스 밤부 좌식 엑슬 테이블
- 캐치마인드
- 프래그먼트
- 면접
- 리얼하다
- 테트리스
- 베드트레이
- 1일1커밋
- 함수형 프로그래밍
- 목적 중심 리더십
- 슬기로운 온라인 게임
- T자형인재
- 한단어의힘
- 아비투스
- 좌식테이블
- 한달브런치북만들기
- 베드테이블
- 자취필수템
- 목적중심리더십
- 한달어스
- 어떻게 나답게 살 것인가
- 커스텀린트
- 지지않는다는말
- 한달독서
- 소프시스
- 끝말잇기
- 브런치작가되기
- 북한살둘레길
- 안드로이드
- Today
- Total
정상에서 IT를 외치다
[Android, Espresso] Ui Test using Espresso 본문
안녕하세요. 블랙진입니다.
안드로이드 테스트에 관한 포스팅을 진행하고 있습니다.
아래는 이전 포스팅 내용입니다.
이번 시간에는 Ui 테스트를 할 수 있는 espresso 에 관해 살펴보겠습니다.
귀여운 아이콘의 espresso!!
1. app 단계의 build.gradle 에 아래 라이브러리가 있는지 확인합니다.
android {
compileSdkVersion 28
defaultConfig {
applicationId "packageName"
minSdkVersion 15
targetSdkVersion 28
versionCode 1
versionName "1.0"
// Espresso framework
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation"org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
// junit framework
testImplementation 'junit:junit:4.12'
// Mockito framework
testImplementation 'org.mockito:mockito-core:2.22.0'
// Espresso framework
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
androidTestImplementation 'com.android.support.test:rules:1.0.2'
}
안드로이드 3.1.3 버전 기준으로 새 프로젝트를 만들면 테스트 라이브러리가 자동으로 설정되어 있을 수도 있습니다. 본인의 프로젝트와 확인하고 없는 라이브러리만 추가해 주세요
2. 테스트 스토리
제가 테스트할 UI 스토리에 대해서 설명하겠습니다.
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<LinearLayout
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent">
<EditText
android:id="@+id/editText"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"/>
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
</android.support.constraint.ConstraintLayout>
1. editText 의 문구를 입력합니다.
2. editText 의 문구가 textView 에 동일하게 입력됩니다.
3. textView 의 문구가 editText 의 기대값과 같으면 button 을 클릭합니다.
MainActivity.kt
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
editText.addTextChangedListener(object : TextWatcher {
override fun afterTextChanged(p0: Editable?) {
}
override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
}
override fun onTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
textView.text = p0
}
})
button.setOnClickListener { Toast.makeText(this, textView.text, Toast.LENGTH_SHORT).show() }
}
}
editText 의 addTextChangedLister 를 설정하여 textView 에 editText 의 문구가 동일하게 입력되도록 하였습니다.
그리고 button 클릭시 textView 의 text 가 출력되는 예제입니다.
3. HelloWorldEspressoTest
src/androidText/java 에 HelloWorldEspressoTest 파일을 생성합니다.
import android.support.test.espresso.Espresso;
import android.support.test.rule.ActivityTestRule;
import android.support.test.runner.AndroidJUnit4;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import static android.support.test.espresso.action.ViewActions.click;
import static android.support.test.espresso.action.ViewActions.closeSoftKeyboard;
import static android.support.test.espresso.action.ViewActions.typeText;
import static android.support.test.espresso.assertion.ViewAssertions.matches;
import static android.support.test.espresso.matcher.ViewMatchers.withId;
import static android.support.test.espresso.matcher.ViewMatchers.withText;
@RunWith(AndroidJUnit4.class)
public class HelloWorldEspressoTest {
@Rule
public ActivityTestRule<MainActivity> mActivityRule = new ActivityTestRule(MainActivity.class);
@Test
public void listGoesOverTheFold() {
//editText 에 Hello World! 입력하고 키보드를 내립니다.
Espresso.onView(withId(R.id.editText)).perform(typeText("Hello World!"), closeSoftKeyboard());
//textView 의 값이 "Hello World!" 인지 확인합니다.
Espresso.onView(withId(R.id.textView)).check(matches(withText("Hello World!")));
//button 을 클릭합니다.
Espresso.onView(withId(R.id.button)).perform(click());
}
}
설명은 주석을 참고해 주세요.
4. Annotation 설명
출저 Android Testing Part1:Expresso Basic
출저에 표시한 두 사이트는 테스트 코드 작성에 많은 참고가 된 사이트 입니다. 위 설명 말고도 해당 사이트에 들어가 내용을 확인해 보면 더욱 좋을 것 같습니다.
5. 실행하기
HelloWorldEspressoTest 파일을 우클릭 한후 Run HelloWorldEspressoTest 를 클릭하면 테스트가 진행됩니다. 이때 디바이스 혹은 예물레이터가 있어야 됩니다.
'안드로이드' 카테고리의 다른 글
[Android, Test] 통신 테스트 하기 위한 주소 (0) | 2018.10.11 |
---|---|
[Android, MaterialExample] 머테리얼 기본 예제 (기록) (0) | 2018.10.08 |
[Android, Mockito] Unit Test using Mockito (2) | 2018.10.05 |
[Android, Test ] UnitTest, UiTest 기본 예제 (1) | 2018.10.05 |
[Android, Dagger2] Dagger2 사용 예제 - 2. SharedPref (0) | 2018.10.04 |