6월 3일의 ⁠#Android11: 베타 버전 출시 행사에 참여하세요.

데이터베이스 테스트

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 지원 라이브러리를 사용합니다. 이 지원을 통해 지원 라이브러리의 맞춤 구현을 전달하여 데이터베이스 쿼리를 테스트할 수 있습니다.