[codelab 5.2 - 3]Testing Strategy - 테스트 전략 개념 소개(테스트 피라미드, )
Android/Android Test

[codelab 5.2 - 3]Testing Strategy - 테스트 전략 개념 소개(테스트 피라미드, )

728x90
반응형

 

이 코드 랩에서는 test doubles 과 dependency injection을 사용하여 repositories,  view models, fragments를 테스팅하는 방법을 배웁니다.

그전에 이러한 테스트를 작성하기위해 무엇을 어떻게 해야하는지 가이드하는 방법론을 이해하는 것이 중요합니다.

 

이 섹션에서는 Android에 적용되는 일반적인 테스트 모범 사례를 다룹니다.

 

The Testing Pyramid

테스트 전략에 대해 생각할때 다음 3가지 관점에서 살펴볼수 있습니다. 

  • 범위Scope — 테스트는 얼마나 많은 코드를 다루나요? 테스트는 단일 메서드, 전체 애플리케이션 또는 그 중간 어딘가에서 실행할 수 있습니다.
  • 속도Speed — 테스트는 얼마나 빨리 실행됩니까? 테스트 속도는 밀리 초에서 몇 분까지 다양합니다.
  • 충실도Fidelity — 테스트는 얼마나 "실제"입니까? 예를 들어 테스트중인 코드의 일부가 네트워크 요청을해야하는 경우 테스트 코드가 실제로이 네트워크 요청을합니까, 아니면 결과를 위조합니까? 테스트가 실제로 네트워크와 통신하는 경우 정확도가 더 높다는 의미입니다. 단점은 테스트 실행 시간이 더 오래 걸리거나 네트워크가 다운되면 오류가 발생하거나 사용 비용이 많이들 수 있다는 것입니다.

이러한 측면 사이에는 본질적인 절충점이 있습니다. 속도와 충실도는 반비례관계에 있습니다. 

테스트 속도가 빠를수록 일반적으로 충실도가 떨어지며 그 반대의 경우도 마찬가지입니다.

 


자동화 된 테스트를 나누는 일반적인 방법 중 하나는 다음 세 가지 범주로 나뉩니다.

단위 테스트

  • 일반적으로 해당 클래스의 단일 메서드 인 단일 클래스에서 실행되는 매우 집중된 테스트입니다.
  • 단위 테스트가 실패하면 코드에서 문제가있는 위치를 정확히 알 수 있습니다.
  • 실제 세계에서 앱은 하나의 메서드 또는 클래스를 실행하는 것보다 훨씬 더 많은 것을 포함하므로 충실도가 낮습니다. 코드를 변경할 때마다 실행할 수있을만큼 빠릅니다.
  • 대부분 로컬에서 실행되는 테스트입니다 (테스트 소스 세트에서). 예 :보기 모델 및 저장소에서 단일 메소드 테스트.

통합 테스트

  • 여러 클래스의 상호 작용을 테스트하여 함께 사용할 때 예상대로 작동하는지 확인합니다.
  • 통합 테스트를 구성하는 한 가지 방법은 태스크 저장 기능과 같은 단일 기능을 테스트하도록하는 것입니다.
  • 단위 테스트보다 더 넓은 범위의 코드를 테스트하지만 완전한 충실도를 유지하는 것보다 빠르게 실행되도록 최적화되어 있습니다.
  • 상황에 따라 로컬 또는 계측 테스트로 실행할 수 있습니다. 
  • 예 : 단일 프래그먼트 및 뷰 모델 쌍의 모든 기능을 테스트합니다.

종단 간 테스트 (E2e)

  • 함께 작동하는 기능 조합을 테스트합니다.
  • 그들은 앱의 많은 부분을 테스트하고 실제 사용을 면밀히 시뮬레이션하므로 일반적으로 느립니다.
  • 그들은 최고의 충실도를 가지고 있으며 응용 프로그램이 실제로 전체적으로 작동한다고 알려줍니다.
  • 대체로 이러한 테스트는 계측 테스트가됩니다 (androidTest 소스 세트에 있음).
  • 예 : 전체 앱을 시작하고 몇 가지 기능을 함께 테스트합니다.

 

 

이러한 테스트들의 권장되는 실행 비율은 피라미드로 표시될수 있고, 대부분이(70%) 단위 테스트입니다.

 

 

Architecture and Testing

앞으로 실습할 테스트들 

1. Repository 단위(unit) 테스트
- 가짜 Data Source 만들기
- Dependency Injection을 사용하여 Test 작성
- 가짜 Repository 준비하기
- ViewModel 내에서 가짜 Repository 사용

2. Fragments와 그의ViewModels를 위한 통합테스트(integration) 테스트
- 테스트에서 Fragment 사용하기
- ServiceLocator 만들기
- Espresso로 첫 번째 integration Test 작성

3. Navigation component 를 위한  통합(integration) 테스트
Mockito를 사용하여 Navigation Test 작성

 

728x90
반응형