SettleUpCompleteViewModel 기준으로 작성
안드로이드에서는 주로 JUnit을 사용하여 단위 테스트(Unit Test)를 작성합니다. 또한, LiveData와 같은 안드로이드 아키텍처 컴포넌트를 테스트하기 위해서는 androidx.arch.core:core-testing 라이브러리를 사용할 수 있습니다.
1. 의존성 추가하기
먼저, 테스트를 위한 의존성을 build.gradle 파일에 추가해야 합니다.
// 단위 테스트를 위한 JUnit
testImplementation 'junit:junit:4.13.2'
// AndroidX Test - LiveData와 같은 컴포넌트를 위한
testImplementation 'androidx.arch.core:core-testing:2.1.0'
// Coroutines 테스트를 위한
testImplementation 'org.jetbrains.kotlinx:kotlinx-coroutines-test:1.4.2'
// Hilt를 사용하는 경우 Hilt 테스트 의존성
androidTestImplementation 'com.google.dagger:hilt-android-testing:2.31.2-alpha'
kaptAndroidTest 'com.google.dagger:hilt-android-compiler:2.31.2-alpha'
// Mocking을 위한 Mockito
testImplementation 'org.mockito:mockito-core:3.3.3'
2. 테스트 클래스 생성하기
SettleUpCompleteViewModel 클래스를 테스트하기 위한 테스트 클래스를 생성하세요. 가장 기본적인 형태로는 다음과 같습니다.
import androidx.arch.core.executor.testing.InstantTaskExecutorRule
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.test.runBlockingTest
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.mockito.Mock
import org.mockito.MockitoAnnotations
@ExperimentalCoroutinesApi
class SettleUpCompleteViewModelTest {
@get:Rule
var instantExecutorRule = InstantTaskExecutorRule()
@Mock
private lateinit var prefs: SharedPreferenceUtil
@Mock
private lateinit var settlementAddUseCase: SettlementAddUseCase
@Mock
private lateinit var booksSettingGetUseCase: BooksSettingGetUseCase
@Mock
private lateinit var alarmSaveGetUseCase: AlarmSaveGetUseCase
private lateinit var viewModel: SettleUpCompleteViewModel
@Before
fun setUp() {
MockitoAnnotations.initMocks(this)
viewModel = SettleUpCompleteViewModel(
stateHandle = SavedStateHandle(),
prefs = prefs,
settlementAddUseCase = settlementAddUseCase,
booksSettingGetUseCase = booksSettingGetUseCase,
alarmSaveGetUseCase = alarmSaveGetUseCase
)
}
@Test
fun testGetOutcomesItems() = runBlockingTest {
// 여기에서 getOutcomesItems()의 결과를 테스트하는 로직을 작성합니다.
}
}
3. 테스트 케이스 작성하기
실제로 테스트를 진행하려면, Mockito 라이브러리를 사용하여 필요한 메서드의 동작을 모의(Mock)하고, 테스트 대상 메서드를 실행한 뒤 결과를 검증해야 합니다. 예를 들어, getOutcomesItems() 메서드를 테스트한다면 Mockito를 사용하여 settlementAddUseCase의 동작을 모의할 수 있습니다.
주의 사항
- LiveData를 테스트 하기 위해서는 InstantTaskExecutorRule을 사용하세요. 이는 LiveData 이벤트가 메인 스레드에서 동기적으로 실행되도록 도와줍니다.
- 코루틴을 사용하는 경우 @ExperimentalCoroutinesApi 어노테이션과 함께 runBlockingTest 블록을 사용하여 테스트를 작성하세요.
- Hilt, Room, Retrofit 등의 라이브러리를 사용하는 경우 해당 라이브러리들의 테스트를 위한 추가 설정이 필요할 수 있습니다.
테스트 코드 작성은 앱의 안정성을 보장하고, 리팩토링이나 기능 추가 시 기존 기능이 올바르게 동작하는지 검증하는 데 매우 중요합니다. 위의 가이드를 참고하여 SettleUpCompleteViewModel 클래스의 다른 메서드들에 대해서도 테스트를 작성해보세요.
- 뤼튼 답 응용
'Android' 카테고리의 다른 글
[Android] 2024 드로이드나이츠 - 기록하고 싶은 내용 정리 (1) | 2024.06.11 |
---|---|
[Android] BindingAdapter를 활용한 값에 따른 textSize 값 바꾸기 (1) | 2024.05.30 |
[Android] FCM (Firebase Cloude Messaging Service) 구현 과정 (0) | 2024.05.21 |
[Android] getty 이미지 가져오기 - 이미지 크롤링 (0) | 2024.05.07 |
[Android] 네이버 부스트캠프 웹·모바일과 함께하는 부캠라디오 (0) | 2024.04.22 |