728x90
InstantTaskExecutorRule을 이용하면 안드로이드 구성요소 관련 작업들을 모두 한 스레드에서 실행되게 한다.
그러므로 모든 작업이 synchronous하게 동작하여 테스팅을 원활하게 할 수 있다.
즉 동기화 때문에 고민할 필요가 없어진다.
Mock을 사용하여 Calculations 객체 생성 후 when thenReturn을 사용하여 해당 함수 리턴값 설정
package com.anushka.circlecalc
import androidx.arch.core.executor.testing.InstantTaskExecutorRule
import com.google.common.truth.Truth
import com.google.common.truth.Truth.assertThat
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.mockito.Mockito
class CalcViewModelTest{
private lateinit var calcViewModel: CalcViewModel
private lateinit var calculations: Calculations
@Before
fun setUp() {
calculations = Mockito.mock(Calculations::class.java)
Mockito.`when`(calculations.calculateArea(2.1)).thenReturn(13.8474)
Mockito.`when`(calculations.calculateCircumference(1.0)).thenReturn(6.28)
calcViewModel = CalcViewModel(calculations)
}
@get:Rule
val instantTaskExecutorRule = InstantTaskExecutorRule()
@Test
fun calculateArea_radiusSent_updateLiveData(){
calcViewModel.calculateArea(2.1)
val result = calcViewModel.areaValue.value
assertThat(result).isEqualTo("13.8474")
}
@Test
fun calculateCircumference_radiusSent_updateLiveData(){
calcViewModel.calculateCircumference(1.0)
val result = calcViewModel.circumference.value
assertThat(result).isEqualTo("6.28")
}
}
728x90
'안드로이드 > UnitTest' 카테고리의 다른 글
안드로이드 테스트 Mock Web Server (0) | 2022.12.13 |
---|---|
안드로이드 livedata 테스트 (0) | 2022.12.11 |
안드로이드 AndroidTest (room dao test) (0) | 2022.12.11 |
안드로이드 UnitTest (0) | 2022.12.11 |