아래 글은 이전에 작성한 ViewModel 클래스를 참고로 작성되었습니다.
1. Unit Test 라이브러리 Implementation 하기
- App 모듈의 build.gradle에 아래 내용을 추가하고 sync 합니다.
- 보통은 기본으로 추가되어 있습니다.
dependencies {
testImplementation("junit:junit:4.13.2")
androidTestImplementation("androidx.test.ext:junit:1.1.5")
androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1")
testImplementation("androidx.arch.core:core-testing:2.2.0")
}
2. ViewModel 클래스를 테스트할 Test Class를 만듭니다.
- Test 파일은 “/app/src/test/java/com/swjsw/app/” 폴더밑에 생성합니다.
class FlashlightViewModelUnitTest {
@get:Rule
val rule = InstantTaskExecutorRule()
private lateinit var viewModel: FlashlightViewModel
@Before
fun setup() {
viewModel = FlashlightViewModel()
}
@Test
fun testTurnOnFlashlight() {
viewModel.turnOnFlashlight()
// LiveData 값이 변경되었는지 확인
assert(viewModel.isFlashlightOn.value == true)
}
@Test
fun testTurnOffFlashlight() {
viewModel.turnOffFlashlight()
// LiveData 값이 변경되었는지 확인
assert(viewModel.isFlashlightOn.value == false)
}
}
- 위 코드에서 InstantTaskExecutorRule() 을 사용하는 이유는 아래와 같습니다.
*InstantTaskExecutorRule*은 Android Architecture Components 중 하나인 LiveData를 테스트할 때 사용되는 JUnit 규칙입니다. LiveData는 기본적으로 메인 스레드에서 작동하므로 테스트에서 LiveData를 사용할 때 메인 스레드 규칙을 따르지 않으면 예외가 발생할 수 있습니다.
*InstantTaskExecutorRule*을 사용하면 LiveData를 비동기적으로 테스트할 때 메인 스레드 규칙을 자동으로 따르게 됩니다. 이 규칙을 사용하면 LiveData가 데이터를 변경할 때 테스트 스레드에서 동작하는 것처럼 보이며, LiveData의 값을 즉시 업데이트할 수 있습니다.
즉, *InstantTaskExecutorRule*을 사용하면 LiveData를 테스트할 때 메인 스레드와 관련된 문제를 해결하고, LiveData를 더 쉽게 테스트할 수 있도록 도와줍니다. 이렇게 함으로써 UI 스레드와 관련된 문제나 비동기 코드를 테스트하기가 더 쉬워집니다.
3. Test Class 파일에서 오른쪽 마우스 버튼을 클릭한 다음 ‘Run ~’ 메뉴를 클릭합니다.
- 테스트 결과를 아래와 같이 확인할 수 있습니다.
- 그리고 확인 버튼을 클릭하면 세부 테스트 항목을 볼 수 있습니다.
'Android > Unit Test' 카테고리의 다른 글
[Android] Unit Test 작성하기 -5(Mockito-2) (0) | 2023.09.27 |
---|---|
[Android] Unit Test 작성하기 -4(Mockito-1) (0) | 2023.09.27 |
[Android] 구글 Coroutine Test 정리 글 (0) | 2023.09.22 |
[Android] Unit Test 작성하기 -3 (0) | 2023.09.22 |
[Android] Unit Test 작성하기 -2 (0) | 2023.09.22 |