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

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))
    }
}

Java

@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 데이터베이스 테스트 및 디버깅에 관한 자세한 내용은 다음 추가 리소스를 참고하세요.

블로그 게시물

동영상