한국의 개발자들을 위한 Google for Developers 국문 블로그입니다.
Android에서 한 번만 작성하면 어디서든 테스트 실행 가능합니다
2019년 1월 30일 수요일
<블로그 원문은
이곳
에서 확인하실 수 있으며 블로그 번역 리뷰는 이승민(Android GDE)님이 참여해 주셨습니다>
우리는 18’Google I/O에서
Jetpack
의 일환으로 AndroidX Test를 출시했습니다. Robolectric v4.0과 함께
v1.0.0
Final에 대해서도 소개해드립니다. 1.0.0 버전의 일부로, 모든 AndroidX Test가 이제
오픈소스
로 제공됩니다.
AndroidX Test는 instrumentation 및 Robolectric 테스트를 포함한 테스트 환경에서 공통 테스트 API를 제공합니다. 그리고 기존의 Android JUnit 4 지원 기능, Espresso 뷰 상호 작용 라이브러리, 여러 가지 새로운 주요 테스트 API를 포함합니다. 이러한 API는 실제 기기와 가상 기기에서 instrumentation 테스트에 사용할 수 있습니다. 현재 Robolectric 4.0에서 이들 API를 로컬 JVM 테스트에도 사용할 수 있습니다.
로그인 화면을 시작하고, 유효한 사용자 이름과 암호를 입력하고, 홈 화면으로 이동하는지 확인하는 다음 사용 사례를 생각해 보세요.
테스트를 단계별로 살펴봅시다.
새로운
ActivityScenario
API를 사용하여 LoginActivity를 시작합니다. 이를 통해 액티비티를 생성하고 재개된(resumed) 상태로 전환하는데, 그러면 사용자에게 표시되어 사용자의 입력을 받을 준비가 됩니다. ActivityScenario는 시스템과의 모든 동기화를 처리하고, 시스템에서 앱을 종료하고(destroyed) 다시 생성하는(recreated) 것과 같이, 테스트해봐야 하는 공통 시나리오에 대한 지원을 제공합니다.
우리는 Espresso 뷰 상호 작용 라이브러리를 사용하여 두 텍스트 입력란에 텍스트를 입력하고 UI에서 버튼을 클릭합니다. ActivityScenario와 마찬가지로, Espresso는 멀티스레딩과 동기화를 자동으로 처리하고 테스트 작성에 사용하기 위해 읽을 수 있는 fluent API를 표시합니다.
우리는 캡처된 인텐트의 목록을 반환하는 새로운
Intents.getIntents()
Espresso API를 사용합니다. 그런 다음, 새로운 Android Truth 확장 프로그램에 속한 IntentSubject.assertThat()을 사용하여 캡처된 인텐트를 확인합니다. Android Truth 확장 프로그램은 기본 Android 프레임워크 객체의 상태를 확인하기 위해 다양한 표현을 제공하고 읽을 수 있는 API를 제공합니다.
Robolectric 또는 임의의 실제 기기나 가상 기기를 사용하여 로컬 JVM에서 이 테스트를 실행할 수 있습니다.
Android 기기에서 테스트를 실행하려면 다음 의존성과 함께 'androidTest' 소스 루트에 테스트를 배치하세요.
androidTestImplementation(“androidx.test:runner:1.1.0”)
androidTestImplementation(“androidx.test.ext:junit:1.0.0”)
androidTestImplementation(“androidx.test.espresso:espresso-intents:3.1.0”)
androidTestImplementation(“androidx.test.espresso:espresso-core:3.1.0”)
androidTestImplementation(“androidx.test.ext:truth:1.0.0”)
실제 기기나 가상 기기에서 실행하면 작성한 코드가 Android 시스템과 올바르게 상호 작용함을 확실히 알 수 있습니다. 하지만 테스트 사례의 수가 늘어남에 따라 테스트 실행 시간이 영향을 받기 시작합니다. 로컬 JVM에서 더 빠르게 테스트를 실행할 수 있는 Robolectric과 같은 시뮬레이터에서 다수의 작은 단위 테스트를 실행하는 동안 실제 기기에서는 소수의 더 큰 테스트만 실행하도록 결정할 수 있습니다.
Robolectric 시뮬레이터를 사용하여 로컬 JVM에 대한 테스트를 실행하려면 '테스트' 소스 루트에 테스트를 배치하고 gradle.build에 다음 행을 추가하세요.
testImplementation(“androidx.test:runner:1.1.0”)
testImplementation(“androidx.test.ext:junit:1.0.0”)
testImplementation(“androidx.test.espresso:espresso-intents:3.1.0”)
testImplementation(“androidx.test.espresso:espresso-core:3.1.0”)
testImplementation(“androidx.test.ext:truth:1.0.0”)
testImplementation (“org.robolectric:robolectric:4.0”)
android {
testOptions.unitTests.includeAndroidResources = true
}
시뮬레이터와 instrumentation 사이의 테스트 API를 통합하면 많은 흥미로운 가능성이 열립니다! Google I/O에서도 발표한 Project Nitrogen을 통해 런타임 환경 간에 테스트를 원활하게 이동할 수 있을 것입니다. 이는 곧 새로운 AndroidX Test API에 대해 작성된 테스트를 수행하고 로컬 JVM, 실제 기기 또는 가상 기기, 더 나아가 Firebase Test Lab과 같은 클라우드 기반 테스트 플랫폼에서도 테스트를 실행할 수 있음을 의미합니다. 이를 통해 개발자가 자신이 개발한 애플리케이션의 품질에 관해 빠르고 정확하며 실행 가능한 피드백을 받을 수 있는 기회를 누리게 될 것이라는 사실에 매우 기쁩니다.
마지막으로, 모든 AndroidX 컴포넌트가 완전히
오픈소스로 제공
된다는 것을 뿌듯한 마음으로 알려드리며, 개발자 여러분의 기여를 기다리겠습니다.
자세히 알아보기
문서:
https://developer.android.com/testing
출시 노트:
AndroidX Test:
https://developer.android.com/training/testing/release-notes
Robolectric:
https://github.com/robolectric/robolectric/releases/
Robolectric:
https://github.com/robolectric/robolectric
AndroidX Test:
https://github.com/android/android-test
Contents
ML/Tensorflow
Android
Flutter
Web/Chrome
Cloud
Google Play
Community
Game
Firebase
검색
Tag
인디게임페스티벌
정책 세미나
창구프로그램
AdMob
AI
Android
Android 12
Android 12L
Android 13
Android 14
Android Assistant
Android Auto
Android Games
Android Jetpack
Android Machine Learning
Android Privacy
Android Studio
Android TV
Android Wear
App Bundle
bootcamp
Business
Chrome
Cloud
Community
compose
Firebase
Flutter
Foldables
Game
gdg
GDSC
google
Google Developer Student Clubs
Google Play
Google Play Games
Interview
Jetpack
Jetpack Compose
kotlin
Large Screens
Library
ma
Material Design
Material You
ML/Tensorflow
mobile games
Now in Android
PC
Play Console
Policy
priva
wa
wear
Wearables
Web
Web/Chrome
Weeklyupdates
WorkManager
Archive
2024
11월
10월
9월
8월
7월
6월
5월
4월
3월
2월
1월
2023
12월
11월
10월
9월
8월
7월
6월
5월
4월
3월
2월
1월
2022
12월
11월
10월
9월
8월
7월
6월
5월
4월
3월
2월
1월
2021
12월
11월
10월
9월
8월
7월
6월
5월
4월
3월
2월
1월
2020
12월
11월
10월
9월
8월
7월
6월
5월
4월
3월
2월
1월
2019
12월
11월
10월
9월
8월
7월
6월
5월
4월
3월
2월
1월
2018
12월
11월
10월
9월
8월
7월
6월
5월
4월
3월
2월
1월
2017
12월
11월
10월
9월
8월
7월
6월
5월
4월
3월
2월
1월
2016
12월
11월
10월
9월
8월
7월
6월
5월
4월
3월
2월
1월
2015
12월
11월
10월
9월
8월
7월
6월
5월
4월
3월
2월
1월
2014
12월
11월
10월
9월
8월
7월
6월
5월
4월
3월
2월
1월
2013
12월
11월
10월
9월
8월
7월
6월
5월
4월
3월
2월
1월
2012
12월
11월
10월
9월
8월
7월
6월
5월
3월
2월
1월
2011
12월
11월
Feed