반응형

Espresso 는 신뢰성 높은 UI Test를 쉽게 작성하게 해주는 테스팅 프레임워크입니다.

 

Espresso 는 내 어플리케이션의 UI와 테스트를 자동으로 동기화 해줍니다. 또한, 테스트를 실행하기 전 Activity가 먼저 실행되는 것을 보장합니다. 한 마디로, 테스트는 액티비티의 모든 백그라운드 작업이 끝날때까지 기다렸다가 테스트를 수행합니다.

 

Espresso 는 하나의 어플리케이션 뿐만 아니라 여러 어플리케이션을 테스트 하는 데도 사용될 수 있습니다. 만약 내 어플리케이션이 아닌 외부의 어플리케이션을 테스트할 때면 외부 앱의 클래스에는 접근할 수 없기 때문에 블랙박스 테스트만 가능합니다.

 

☞ Black Box Test 란?
소프트웨어의 내부 코드 구조, 구현 세부사항 및 내부 경로에 대한 접근 없이 오직 Application의 기능을 테스트하는 테스트 기법입니다.

 

Espresso의 기본 컴포넌트

Espresso는 다음 3 가지의 기본 컴포넌트를 갖습니다.

  1. ViewMatchers - allows to find view in the current view hierachy
  2. ViewActions - allows to perform actions on the views
  3. ViewAssertions - 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의 멀티 프로세스 기능이 있는 패키지

보다 자세한 내용은 릴리즈 노트를 참고하시기 바랍니다.

 

샘플

반응형
반응형