데이터베이스 테스트 및 디버깅

Room 지속성 라이브러리를 사용하여 데이터베이스를 생성할 때 앱의 데이터베이스와 사용자 데이터의 안정성을 확인해야 합니다. 이 페이지에서는 데이터베이스를 테스트하고 테스트를 통과하는 데 도움이 되는 디버깅 단계를 실행하는 방법을 설명합니다.

데이터베이스 테스트

데이터베이스를 테스트하는 방법에는 두 가지가 있습니다.

  • Android를 실행하는 기기에서
  • 호스트 개발 머신에서

데이터베이스 이전과 관련된 테스트에 관한 자세한 내용은 이전 테스트를 참고하세요.

Android를 실행하는 기기에서 테스트

데이터베이스 구현을 테스트하려면 Android를 실행하는 기기에서 실행되는 JUnit 테스트를 작성하는 것이 좋습니다. 이러한 테스트에서는 활동이 필요하지 않으므로 UI 테스트보다 빠르게 실행됩니다.

테스트를 설정할 때 다음 예와 같이 메모리 내 데이터베이스 버전을 생성하여 테스트의 폐쇄성을 더 강화해야 합니다.

import kotlinx.coroutines.test.runTest

@RunWith(AndroidJUnit4::class)
class SimpleEntityReadWriteTest {
    private lateinit var userDao: UserDao
    private lateinit var db: TestDatabase

    @Before
    fun createDb() {
        val context = ApplicationProvider.getApplicationContext<Context>()
        db = Room.inMemoryDatabaseBuilder<TestDatabase>(context)
                .setDriver(BundledSQLiteDriver())
                .build()
        userDao = db.userDao()
    }

    @After
    fun closeDb() {
        db.close()
    }

    @Test
    fun writeUserAndReadInList() = runTest {
        val user = User(3, "george")
        userDao.insert(user)
        val byName = userDao.findUsersByName("george")
        assertEquals(byName.single(), user)
    }
}

호스트 머신 (JVM)에서 테스트

Room KMP를 사용하면 로컬 JVM JUnit 테스트를 사용하여 호스트 개발 머신에서 데이터베이스 테스트를 실행할 수 있습니다. 이 설정을 사용하면 Android 에뮬레이터 또는 기기의 오버헤드를 없애 테스트를 더 빠르게 실행할 수 있습니다.

일관성을 유지하려면 BundledSQLiteDriver를 사용하세요. 이 드라이버에는 소스에서 컴파일된 SQLite가 포함되어 있으며, 호스트 머신, Android 기기, iOS 기기에서 정확히 동일한 버전의 SQLite를 사용합니다. 이 드라이버를 사용하면 버전 불일치 문제가 해결됩니다.

JVM 테스트를 설정하려면 테스트 데이터베이스 빌더에서 BundledSQLiteDriver를 구성하세요.

val db = Room.inMemoryDatabaseBuilder<TestDatabase>()
    .setDriver(BundledSQLiteDriver())
    .build()

이전 테스트

Room에서는 앱 업데이트로 데이터베이스 스키마가 변경되는 상황에서 기존 앱 데이터를 유지할 수 있도록 증분 데이터베이스 이전을 지원합니다. 그러나 잘못 정의된 이전으로 인해 앱이 비정상 종료될 수 있습니다. Room 데이터베이스 이전을 테스트해야 합니다 .

데이터베이스 디버깅

데이터베이스를 디버그하는 데 사용할 수 있는 여러 도구와 프로세스가 있습니다.

Database Inspector 사용

Android 스튜디오 4.1 이상에서는 Database Inspector를 사용하여 앱 실행 중에 앱의 데이터베이스를 검사하고 쿼리 및 수정할 수 있습니다. Database Inspector는 Android와 함께 번들로 제공되는 SQLite 버전과 호환되며, Room에서 사용할 수 있는 다음과 같은 특수 기능이 포함되어 있습니다.

  • 거터 작업을 사용하여 DAO 클래스에서 쿼리를 실행합니다.
  • 실행 중인 앱에서 데이터를 변경하면 Database Inspector에서 실시간 업데이트를 즉시 확인할 수 있습니다.

Database Inspector에 관한 자세한 내용은 Database Inspector로 데이터베이스 디버그를 참고하세요.

명령줄에서 데이터 덤프

Android SDK에는 앱의 데이터베이스를 검사하기 위한 sqlite3 데이터베이스 도구가 포함되어 있습니다. 이 도구에는 테이블의 콘텐츠를 출력하는 .dump 및 기존 테이블의 SQL CREATE 문을 출력하는 .schema와 같은 명령어가 포함되어 있습니다.

또한 다음 스니펫과 같이 명령줄에서 SQLite 명령어를 실행할 수도 있습니다.

adb -s emulator-5554 shell sqlite3
/data/data/your-app-package/databases/rssitems.db

자세한 내용은 SQLite 웹사이트에서 제공되는 sqlite3 명령줄 문서를 참고하세요.

추가 리소스

Room 데이터베이스 테스트 및 디버깅에 관한 자세한 내용은 다음 추가 리소스를 참고하세요.

블로그 게시물

동영상