[Android TEST/안드로이드 테스트] 테스트 기본 요소 정리(2) - 테스트 작성

2020. 6. 18. 15:59└ Foundation/Android TEST

테스트 작성  

테스트 피라미드 수준 

  • 소형 테스트(Unit Test) : 한 번에 한 클래스씩 앱 동작의 유효성 검사하는 단위 테스트(Unit test)

  • 중형 테스트(Intergration Test) : 모듈 내의 스택 수준 간 상호작용 or 관련 모듈 간 상호작용의 유효성을 검사하는 통합 테스트 

  • 대형 테스트(UI Test) : 앱의 여러 모듈에 걸쳐 사용자 여정의 유효성을 검사하는 엔드 투 엔드 테스트 

소형에서 대형으로 갈수록 충실도, 실행 시간, 유지보수 및 디버깅 노력 증가 따라서, 테스트 비율은 소형 70%, 중형 20% 대형 10% 가 적당하다. 

 

1. 소형 테스트 작성 

  • 앱 내 각 클래스의 기능 및 계약을 철저하게 검증하는 단위 테스트

  • 특정 클래스 내에 메서드를 추가하고 변경할 때 해당하는 메서드에 관한 단위 테스트를 만들고 실행

  1. 로컬 단위 테스트 

    • JVM 환경 테스트인 경우 Robolectric 사용가능 

  2. 계측 단위 테스트

    • 실제 기기 또는 에뮬레이터에서 계측 단위 테스트 가능

    • 계측 테스트를 실행하는 경우 AndroidX 테스트에서 다음 스레드 사용

      • Main Thread (UI Thread, 활동 Thread), 여기서 UI 상호작용 및 액티비티 수명 주기 이벤트, 발생 테스트가 Main Thread에서 실행되어야 하는 경우 @UiThreadTest 주석 사용 

      • 테스트 모음이 시작될 때 AndroidJUnitTest 클래스가 이 스레드를 시작 

 

2. 중형 테스트 작성 

  • 모듈 수준에서 앱 동작의 유효성을 검사해야하는 경우 단위 그룹의 공동작업 및 상호작용 유효성을 검사하는 통합테스트인 중형테스트를 작성 

  • 중형 테스트의 좋은 예

    1.  뷰와 뷰 모델 간의 상호작용(예: Fragment 개체 테스트, 레이아웃 XML 유효성 검사 또는 ViewModel 개체의 데이터 바인딩 로직 평가)

    2. 여러 데이터 소스 및 데이터 액세스 개체(DAO)가 예상대로 상호작용하는지 확인하는 앱 저장소 레이어의 테스트

    3. 특정 화면의 상호작용을 테스트하는 앱의 세로 슬라이스. 이러한 테스트는 앱 스택의 레이어 전반에서 상호작용을 확인

    4. 앱의 특정 영역을 평가하는 다중 프래그먼트 테스트. 이 목록에 언급된 다른 유형의 중형 테스트와는 달리 일반적으로 이 유형의 테스트에는 실제 기기가 필요합니다. 테스트 중인 상호작용에 여러 UI 요소가 포함되어 있기 때문입니다.

  • 위의 테스트를 실행하기 위해서 다음 단계를 따름

    1. Espresso Intents 라이브러리의 메서드 이용 

    2. IntentSubject 와 Truth 기반 어센셜을 함께 사용하여 캡쳐된 인텐트 확인 

  • 계측 중형 테스트 실행 시 Espresso 사용

    • Espresso 는 기기 또는 Robolectric에서 다음과 같은 UI 상호작용을 실행할 때 작업을 동기화된 상태로 유지함 

      • Performing actions on View objects.

      • Assessing how users with accessibility needs can use your app.

      • Locating and activating items within RecyclerView and AdapterView objects.

      • Validating the state of outgoing intents.

      • Verifying the structure of a DOM within WebView objects.

 

3. 대형 테스트 작성 

  • 앱 내 각 클래스와 모듈을 격리된 상태에서 테스트하는것도 중요하지만 여러 모듈 및 기능을 통해 사용자를 안내하는 엔드 투 엔드 워크플로의 유효성을 검사하는 것도 중요

  • Espresso의 동기화 지원

    • Espresso는 중간 계측 테스트 지원뿐만 아니라 대형 테스트에서도 동기화를 지원

      • Completing workflows that cross your app's process boundaries. Available only on Android 8.0 (API level 26) and higher.

      • Tracking long-running background operations within your app.

      • Performing off-device tests.