이번 글에서는 다양한 테스트를 위한 기반 프로젝트를 생성한다. 이후에 ViewModel, Dagger-Hilt, Retrofit 등 다양한 프레임워크와 함께 구글 안드로이드 진영에서 제안하는 클린 아키텍처에 대한 테스트 고민도 함께 진행을 하려한다.
그러한 테스트에 앞서 테스트를 하기 위한 프로젝트를 미리 생성한다. 해당 프로젝트의 전체 코드는 다음과 같다. (https://github.com/linuxias/Android-Testing/tree/setup_for_testing/Setup_For_Testing)
프로젝트의 기반 프로젝트 (?)
테스트를 위한 기반 프로젝트는 안드로이드 코드랩에서 제공하는 MarsPhoto 프로젝트(https://developer.android.com/codelabs/basic-android-kotlin-training-getting-data-internet) 사용하려 한다. 해당 프로젝트를 변형하여 테스트 프로젝트로 사용할 것이다.
프로젝트 사용 프레임워크
기본 프로젝트에 사용하는 라이브러리는 아래와 같다.
- Room
- Retrofit2
- Moshi
- Dagger-Hilt
프로젝트 앱 모듈에 추가한 라이브러리 의존성은 아래와 같다.
dependencies {
// Room
def room_version = "2.4.3"
implementation "androidx.room:room-runtime:$room_version"
annotationProcessor "androidx.room:room-compiler:$room_version"
// Retrofit
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
implementation 'com.squareup.retrofit2:converter-moshi:2.9.0'
// Moshi
implementation 'com.squareup.moshi:moshi-kotlin:1.13.0'
// Dagger-Hilt
implementation "com.google.dagger:hilt-android:2.43.2"
kapt "com.google.dagger:hilt-compiler:2.43.2"
implementation 'androidx.core:core-ktx:1.7.0'
implementation 'androidx.appcompat:appcompat:1.5.1'
implementation 'com.google.android.material:material:1.6.1'
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
}
프로젝트의 구조와 코드
먼저 프로젝트 구조는 아래와 같다. 프로젝트 구조에서 주의해야 할 부분은 UI 구성은 되어 있지 않다는 것이다. UI 구성은 현재 작업을 하지 않고 테스팅을 위한 Room(data-local), Retrofit(data-remote), dagger-hilt(di) 등의 구조로 작성되어 있다.
.
└─ java
└─ com
└── linuxias
└── setup_for_testing
├── data
│ ├── local
│ │ ├── MarsPhotoDao.kt
│ │ ├── MarsPhotoItemDatabase.kt
│ │ └── MarsPhotoItem.kt
│ └── remote
│ └── MarsApiService.kt
├── di
│ └── AppModule.kt
├── MainActivity.kt
└── MarsApplication.kt
코드는 아래 프로젝트를 참고하는게 더 빠를 것이다. 코드를 확인 시 이해가 되지 않는 부분은 코멘트를 달아주면 설명을 드리려 한다.
https://developer.android.com/codelabs/basic-android-kotlin-training-getting-data-internet
여기서는 Room, Retrofit2, Dagger-hilt 등의 라이브러리의 상세한 구조, 동작원리 그리고 사용법을 설명하지는 않는다. 기본적으로 해당 라이브러리를 사용한 구조 설계 및 구현 시 라이브러리의 동작원리와 사용법은 어느정도 숙지해야 하기에 여기서는 이미 알고있다는 가정하에 설명을 할 것이다.
이어지는 글에서는 이제 해당 프로젝트를 이용하여 각 모듈을 테스트하기 위한 구조와 방법에 대해서 설명한다.
'Android > Testing' 카테고리의 다른 글
[Android/Testing] #7. ViewModel 테스트하기 (with Fake Repository) (0) | 2022.10.22 |
---|---|
[Android/Testing] #6. 테스트 시작 전에 테스트 더블(Test Double) 이해하기 (0) | 2022.10.08 |
[Android/Testing] #4. Room Database 테스트 (0) | 2022.09.18 |
[Android/Testing] #3. Unit Testing 입문하기 (0) | 2022.09.15 |
[Android/Testing] #2. 좋은 테스트는 어떻게 작성해야 할까? (1) | 2022.09.12 |