Espresso 는 신뢰성 높은 UI Test를 쉽게 작성하게 해주는 테스팅 프레임워크입니다.
Espresso 는 내 어플리케이션의 UI와 테스트를 자동으로 동기화 해줍니다. 또한, 테스트를 실행하기 전 Activity가 먼저 실행되는 것을 보장합니다. 한 마디로, 테스트는 액티비티의 모든 백그라운드 작업이 끝날때까지 기다렸다가 테스트를 수행합니다.
Espresso 는 하나의 어플리케이션 뿐만 아니라 여러 어플리케이션을 테스트 하는 데도 사용될 수 있습니다. 만약 내 어플리케이션이 아닌 외부의 어플리케이션을 테스트할 때면 외부 앱의 클래스에는 접근할 수 없기 때문에 블랙박스 테스트만 가능합니다.
☞ Black Box Test 란?
소프트웨어의 내부 코드 구조, 구현 세부사항 및 내부 경로에 대한 접근 없이 오직 Application의 기능을 테스트하는 테스트 기법입니다.
Espresso의 기본 컴포넌트
Espresso는 다음 3 가지의 기본 컴포넌트를 갖습니다.
ViewMatchers
- allows to find view in the current view hierachyViewActions
- allows to perform actions on the viewsViewAssertions
- allows to assert state of a view
이를 활용한 테스트의 기본적인 구조는 아래와 같습니다.
onView(ViewMatcher)
.perfrom(ViewAction)
.check(ViewAssertion);
Espresso를 사용하면 이렇듯 간결하면서, 아름답고, 신뢰성 높은 Android UI Test를 작성할 수 있습니다.
동기화
각 테스트 코드에서 onView()를 호출할 때마다 Espresso는 아래와 같은 동기화 조건이 충족될 때까지 UI action 또는 assertion 수행을 대기합니다.
-
Message Queue
가 비어있는가? (여기서 MQ는 Looper가 접근하는 MQ) -
현재 동작중인
AsyncTask
인스턴스는 없는가? -
개발자가 정의한 모든 ****
idling resources
가 유휴 상태인가?>> Idling Resources?
idling resources는 UI 테스트의 후속 작업에 영향을 미치는 비동기 작업을 나타냅니다. idling resources를 Espresso에 등록하면 앱을 테스트할 때 이러한 비동기 작업을 보다 안정적으로 검증할 수 있습니다.Idling Resources에 대해서는 추후 별도로 다루겠습니다.
이러한 점검을 수행함으로써 에스프레소는 주어진 시간에 하나의 UI action 이나 assertion 만이 발생할 가능성을 상당히 증가시켜 줍니다. 이 기능은 보다 신뢰할 수 있고 신뢰할 수 있는 테스트 결과를 제공합니다.
패키지
Espresso 는 통으로 제공되는 것이 아닌, 목적과 용도에 맞게 모듈이 나뉘어져 있습니다.
espresso-core
: View matchers, actions, assertions에 대한 코어와 기본이 담긴 패키지espresso-web
: WebView 를 지원하는 리소스가 담긴 패키지espresso-idling-resource
: background job 과 함께 동기화 매커니즘이 담긴 패키지espresso-contrib
: DatePicker, RecyclerView, Drawer 등에 대해 지원하는 패키지espresso-intents
: 폐쇄적인 테스트를 위한 인텐트 확장이 담긴 패키지espresso-remote
: Espresso의 멀티 프로세스 기능이 있는 패키지
보다 자세한 내용은 릴리즈 노트를 참고하시기 바랍니다.
샘플
- Espresso 공식 샘플 ( Espresso 뿐만 아니라 UIAutomator, JUnit4 등 다양한 샘플 보유)
'Android > Test' 카테고리의 다른 글
[Android UI Test] 6) Espresso 를 활용한 WebView Test (0) | 2020.03.10 |
---|---|
[Android UI Test] 5) Espresso 를 활용한 RecyclerView Test (0) | 2020.03.09 |
[Android UI Test] 4) Espresso Intended 와 Intending (0) | 2020.03.08 |
[Android UI Test] 3) Espresso API 제대로 알고 사용하기 (0) | 2020.03.07 |
[Android UI Test] 2) Espresso 설치 및 환경 구축 (0) | 2020.03.06 |