[kotlin] 룸 데이터베이스의 테스트 방법

안녕하세요! 오늘은 안드로이드 앱에서 많이 사용되는 룸(Room) 데이터베이스의 테스트 방법에 대해 알아보겠습니다. 룸은 안드로이드 아키텍처 컴포넌트 라이브러리 중 하나로, SQLite 데이터베이스에 대한 추상화 계층을 제공하여 데이터베이스와 상호작용할 수 있는 더 쉬운 방법을 제공합니다.

1. Instrumented 테스트

일반적으로 룸 데이터베이스를 테스트하려면 Instrumented 테스트를 사용합니다. Instrumented 테스트는 실제 디바이스나 에뮬레이터에서 실행되며, 데이터베이스에 대한 실제 작업을 시뮬레이트할 수 있습니다.

아래는 간단한 룸 데이터베이스 테스트의 예시입니다.

@RunWith(AndroidJUnit4::class)
class MyDatabaseTest {
    
    private lateinit var myDatabase: MyDatabase
    private lateinit var myDao: MyDao
    
    @Before
    fun setup() {
        val context = InstrumentationRegistry.getInstrumentation().targetContext
        myDatabase = Room.inMemoryDatabaseBuilder(context, MyDatabase::class.java).build()
        myDao = myDatabase.myDao()
    }
    
    @After
    fun tearDown() {
        myDatabase.close()
    }
    
    @Test
    fun insertAndReadData() {
        val data = MyData(1, "example")
        myDao.insert(data)
        val loaded = myDao.getDataById(1)
        assertEquals(data, loaded)
    }
}

위의 코드에서 MyDatabase는 실제 데이터베이스이며 MyDao는 데이터베이스와 상호작용하는 메서드를 포함하고 있습니다. @Before 메서드에서 데이터베이스를 초기화하고, @After 메서드에서 데이터베이스를 닫습니다. @Test 메서드에서는 데이터를 삽입하고 읽어오는 작업을 테스트합니다.

2. 메모리 내 데이터베이스 사용

룸 데이터베이스의 인메모리(In-memory) 모드를 사용하여 테스트할 수도 있습니다. 이 모드를 사용하면 실제 데이터베이스 파일이 디스크에 저장되지 않고, 메모리에만 유지됩니다. 이를 통해 테스트의 성능을 향상시킬 수 있습니다.

val context = ApplicationProvider.getApplicationContext<Context>()
myDatabase = Room.inMemoryDatabaseBuilder(context, MyDatabase::class.java).build()

마치며

룸 데이터베이스의 테스트는 실제 데이터베이스 작업에 대한 안정성을 보장하는 데 중요합니다. Instrumented 테스트 및 인메모리 데이터베이스를 활용하여 데이터베이스 작업을 효과적으로 테스트할 수 있습니다.

참고문헌: Android Developers - Test Room