Room 지속성 라이브러리를 사용하여 데이터베이스를 생성할 때 앱의 데이터베이스와 사용자 데이터의 안정성을 확인하는 것이 중요합니다. 이 페이지에서는 데이터베이스를 테스트하고 테스트를 통과하는 데 도움이 되는 디버깅 단계를 실행하는 방법을 설명합니다.
데이터베이스 테스트
다음과 같이 데이터베이스를 테스트하는 두 가지 방법이 있습니다.
- Android 기기에서 테스트
- 호스트 개발 머신에서 테스트(권장되지 않음)
데이터베이스 이전과 관련된 테스트에 관한 자세한 내용은 이전 테스트를 참고하세요.
Android 기기에서 테스트
데이터베이스 구현을 테스트하는 데 권장되는 접근 방식은 Android 기기에서 실행되는 JUnit 테스트를 작성하는 것입니다. 이러한 테스트에서는 활동을 만들 필요가 없으므로 UI 테스트보다 실행 속도가 더 빠릅니다.
테스트를 설정할 때 다음 예와 같이 메모리 내 데이터베이스 버전을 생성하여 테스트의 폐쇄성을 더 강화해야 합니다.
Kotlin
@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( context, TestDatabase::class.java).build() userDao = db.getUserDao() } @After @Throws(IOException::class) fun closeDb() { db.close() } @Test @Throws(Exception::class) fun writeUserAndReadInList() { val user: User = TestUtil.createUser(3).apply { setName("george") } userDao.insert(user) val byName = userDao.findUsersByName("george") assertThat(byName.get(0), equalTo(user)) } }
자바
@RunWith(AndroidJUnit4.class) public class SimpleEntityReadWriteTest { private UserDao userDao; private TestDatabase db; @Before public void createDb() { Context context = ApplicationProvider.getApplicationContext(); db = Room.inMemoryDatabaseBuilder(context, TestDatabase.class).build(); userDao = db.getUserDao(); } @After public void closeDb() throws IOException { db.close(); } @Test public void writeUserAndReadInList() throws Exception { User user = TestUtil.createUser(3); user.setName("george"); userDao.insert(user); List<User> byName = userDao.findUsersByName("george"); assertThat(byName.get(0), equalTo(user)); } }
호스트 머신에서 테스트
Room은 Android 프레임워크 클래스의 인터페이스와 일치하는 인터페이스를 제공하는 SQLite 지원 라이브러리를 사용합니다. 이 지원을 통해 지원 라이브러리의 맞춤 구현을 전달하여 데이터베이스 쿼리를 테스트할 수 있습니다.
이전 테스트
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 데이터베이스 테스트 및 디버깅에 관한 자세한 내용은 다음 추가 리소스를 참고하세요.
블로그 게시물
동영상
- Database Inspector(11 Weeks of Android)