이번 글에서는 에스프레소를 이용하여 EditText를 테스트하는 코드에 대해서 알아보겠습니다.
Android Espresso를 사용하여 UI를 테스트하는 방법 (2)에 이어지는 3번째 글입니다.
이 페이지의 내용이 매우 짧아, 전문을 Android Espresso를 사용하여 UI를 테스트하는 방법 (2)에 옮겼습니다.
SecondActivity 테스트 코드 작성
SecondActivity는 MainActivity와 거의 동일합니다. MainActivity에는 EXTRA가 "korea"로 하드코딩되어있지만, SecondActivity는 EditText를 통해 입력을 받아 전달한다는 것이 다릅니다.
androidTest폴더에 SecondActivityTest.kt를 생성하고 기본적인 내용들을 입력해줍니다.
@RunWith(AndroidJUnit4::class)
class SecondActivityTest {
@Rule
@JvmField
var activeRule = ActivityTestRule(SecondActivity::class.java)
}
첫번째 테스트
사람이 손으로 EditText에 "korea"를 입력하고 눈으로 결과를 확인하는 단순 작업을 코드로 대신하려고 합니다.
아래 처럼 코드를 입력하면, EditText에 "korea"를 입력하고...
올바른 결과가 리턴되었는지 확인할 수 있습니다.
perform(typeText(inputStr)
는 인자로 전달된 변수를 EditText에 입력하라는 의미입니다.
closeSoftKeyboard()
는 SoftKeyboard가 열려 있으면 닫으라는 의미입니다.
FAB버튼을 누르면 LocaleActivity가 실행되는데요. 이 때 올바른 Locale이 출력되고 있는지 확인합니다.
OK버튼이 눌리면 MainActivity로 Locale정보를 포함한 인텐트가 전달됩니다. MainActivity는 이 인텐트를 받고 결과를 출력해줍니다. 출력이 의도된대로 되었는지 확인합니다.
@Test
fun userInputTest() {
val context = InstrumentationRegistry.getInstrumentation().targetContext
val inputStr = context.getString(R.string.country_korea)
onView(withId(R.id.editTextUserInput))
.perform(typeText(inputStr), closeSoftKeyboard())
onView(withId(R.id.fab))
.perform(click())
onView(withId(R.id.tvLocale))
.check(matches(withText(R.string.locale_korea)))
onView(withId(R.id.btnOk))
.perform(click())
onView(withId(R.id.tvResultLocale))
.check(matches(withText(R.string.locale_korea)))
}
정리
Espresso를 이용하여 EditText가 있는 UI를 테스트해보았습니다.
참고
- 예제코드는 GitHub에 있습니다
- Developers: Espresso
Related Posts
- Android 14 - 사진/동영상 파일, 일부 접근 권한 소개
- Android - adb push, pull로 파일 복사, 다운로드
- Android 14 - 암시적 인텐트 변경사항 및 문제 해결
- Jetpack Compose - Row와 Column
- Android 13, AOSP 오픈소스 다운로드 및 빌드
- Android 13 - 세분화된 미디어 파일 권한
- Android 13에서 Notification 권한 요청, 알림 띄우기
- Android 13에서 'Access blocked: ComponentInfo' 에러 해결
- 에러 해결: android gradle plugin requires java 11 to run. you are currently using java 1.8.
- 안드로이드 - 코루틴과 Retrofit으로 비동기 통신 예제
- 안드로이드 - 코루틴으로 URL 이미지 불러오기
- Android - 진동, Vibrator, VibrationEffect 예제
- Some problems were found with the configuration of task 에러 수정
- Query method parameters should either be a type that can be converted into a database column or a List
- 우분투에서 Android 12 오픈소스 다운로드 및 빌드
- Android - ViewModel을 생성하는 방법
- Android - Transformations.map(), switchMap() 차이점
- Android - Transformations.distinctUntilChanged() 소개
- Android - TabLayout 구현 방법 (+ ViewPager2)
- Android - 휴대폰 전화번호 가져오는 방법
- Android 12 - Splash Screens 알아보기
- Android 12 - Incremental Install (Play as you Download) 소개
- Android - adb 명령어로 bugreport 로그 파일 추출
- Android - adb 명령어로 App 데이터 삭제
- Android - adb 명령어로 앱 비활성화, 활성화
- Android - adb 명령어로 특정 패키지의 PID 찾기
- Android - adb 명령어로 퍼미션 Grant 또는 Revoke
- Android - adb 명령어로 apk 설치, 삭제
- Android - adb 명령어로 특정 패키지의 프로세스 종료
- Android - adb 명령어로 screen capture 저장
- Android - adb 명령어로 System 앱 삭제, 설치
- Android - adb 명령어로 settings value 확인, 변경
- Android 12 - IntentFilter의 exported 명시적 선언
- Android - adb 명령어로 공장초기화(Factory reset)
- Android - adb logcat 명령어로 로그 출력