이 코드 랩에서는 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 작성
'Android > Android Test' 카테고리의 다른 글
[codelab 5.2 - 4, 5 ,6 ,7] Repository Unit Test (Fake Datasource with DI) (0) | 2021.05.05 |
---|---|
[codelab 5.1 -8 9 10]AndroidX 테스트로 ViewModel(LiveData 관찰되는지) 테스트 (0) | 2021.05.03 |
[codelab 5.1 - 5 6 7] Android Test 종류, [일반 클래스] Local Unit Test, TDD (0) | 2021.05.03 |
UI Test (with Espresso) (0) | 2021.04.28 |
Android Test관련 실습 예제 및 소스 목록 (1) | 2021.04.26 |