본문 바로가기

ANDROID/Testing

[Testing/Unit-test] Context를 포함하는 ViewModel의 Unit Test

Problem

유닛테스트를 신규로 도입하게 되면 Testable 하지 않은 프로젝트 코드들과 마주하게 될 때가 있다.

 

아마 가장 손쉽게 맞닥뜨리게 되는 이슈는 Context를 인자로 받는 ViewModel일 것이다.

 

ViewModel이 Context를 포함해야 하느냐는 논의에 앞서 , 기존 코드를 건드리지 않은 채 테스트 커버리지를 확보하는 방법에 대해 짧게 정리하려 한다.

Environments

- Kotlin 1.5.21
- Koin 3.1.2
- Mockito 4.2.0

Soluton

1. Context를 Mockito를 사용해 Mock 한다.

 @Mock
 lateinit var mockedContext: Context

2. Mocking한 context로부터 필요로 하는 사항에 대한 상세사항을 추가로 mocking 한다. 

`when`(mockedContext.getString(anyInt())).thenReturn("mockedString")

 

3. Mock된 context를 ViewModel에 주입한다.

class SampleViewModel(context: Context): ViewModel() {
		...
}

...

val viewModel = SampleViewModel(mockedContext)