본문 바로가기
안드로이드/UnitTest

안드로이드 UnitTest Mock

by 김어찐 2022. 12. 11.
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