안드로이드 앱을 개발하다 보면 테스트가 중요한 요소입니다. 안정적인 앱을 만들기 위해서는 테스트가 필수적입니다. 안드로이드 앱을 테스트하는데는 Robolectric과 Mockito라는 라이브러리가 유용하게 활용됩니다.
이 블로그 포스트에서는 Robolectric을 사용한 안드로이드 앱의 테스트 코드 작성 방법과 Mockito를 사용한 모의 객체(Mock Object)의 생성과 활용에 대해 알아보겠습니다.
Robolectric 소개
Robolectric은 안드로이드 애플리케이션의 테스트를 위한 프레임워크로, 안드로이드 SDK의 소스 코드를 모의(mock)할 수 있는 도구입니다. 이를 통해 안드로이드 앱을 에뮬레이터나 실제 디바이스 없이도 로컬 환경에서 빠르게 테스트할 수 있습니다.
@RunWith(RobolectricTestRunner::class)
class MyActivityTest {
@Test
fun testActivityStart() {
val activity = Robolectric.buildActivity(MyActivity::class.java).create().start().get()
assertNotNull(activity)
}
}
Robolectric을 사용하면 안드로이드의 컴포넌트(Activity, Fragment 등)를 올바르게 생성하고 상태 변화를 테스트할 수 있습니다.
Mockito 소개
Mockito는 자바를 기반으로 한 모의 객체 라이브러리로, 테스트 코드에서 사용되는 다른 객체를 가짜로 대체하여 테스트를 도와줍니다. Mock 객체를 사용하면 의존성이 있는 객체를 테스트할 때 외부 의존성을 없애고 의존성을 가짜로 대체함으로써 테스트를 보다 쉽게 만들어줍니다.
@Test
fun testFetchDataSuccess() {
val mockDataRepository = mock(DataRepository::class.java)
`when`(mockDataRepository.fetchData()).thenReturn("Mock data")
val presenter = MyPresenter(mockDataRepository)
presenter.loadData()
verify(mockDataRepository, times(1)).fetchData()
assertEquals("Mock data", presenter.data)
}
Mockito를 사용하면 데이터베이스나 네트워크와 같은 외부 리소스에 의존하는 코드의 테스트를 용이하게 할 수 있습니다.
Robolectric과 Mockito의 통합
Robolectric을 사용하여 안드로이드 컴포넌트의 테스트를 하다 보면 외부 의존성이 있는 부분을 Mock 객체로 대체할 필요가 있습니다. 이때 Mockito를 사용하여 외부 의존성을 모의(mock) 객체로 대체하고 Robolectric과 통합하여 안드로이드 앱의 유닛 테스트를 보다 효율적으로 수행할 수 있습니다.
@RunWith(RobolectricTestRunner::class)
class MyActivityTest {
@Test
fun testFetchDataSuccess() {
val mockDataRepository = mock(DataRepository::class.java)
`when`(mockDataRepository.fetchData()).thenReturn("Mock data")
val activity = Robolectric.buildActivity(MyActivity::class.java).create().get()
val presenter = MyPresenter(mockDataRepository)
presenter.attachView(activity)
presenter.loadData()
verify(mockDataRepository, times(1)).fetchData()
assertEquals("Mock data", presenter.data)
}
}
이처럼 Robolectric과 Mockito를 통합하여 안드로이드 앱의 테스트를 보다 쉽고 효율적으로 할 수 있습니다.
Robolectric과 Mockito는 안드로이드 앱의 테스트를 위해 매우 유용한 도구입니다. 이 두 라이브러리를 활용하여 안드로이드 앱의 안정성을 높이고 개발 속도를 향상시킬 수 있습니다.