データベースをテストしてデバッグする

Room 永続ライブラリを使用してデータベースを作成する場合、アプリのデータベースとユーザーのデータの安定性を検証する必要があります。このページでは、データベースをテストして、テストに合格するためにデバッグ手順を実行する方法について説明します。

データベースをテストする

データベースをテストするには、次の 2 つの方法があります。

  • Android デバイス上
  • ホスト開発マシン上(非推奨)

データベース移行に固有のテストについては、移行をテストするをご覧ください。

Android デバイス上でテストする

データベース実装をテストする方法として推奨されるのは、JUnit テストを作成して Android デバイス上で実行する方法です。このテストの場合、アクティビティの作成が必要ないため、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 は SQLite サポート ライブラリを使用して、Android フレームワーク クラスのインターフェースと適合するインターフェースを実現します。この機能により、サポート ライブラリのカスタム実装を渡してデータベース クエリをテストすることができます。

データベースをデバッグする

Android SDK には、アプリのデータベースを調査するための sqlite3 データベース ツールが含まれています。これには、テーブルの内容を出力する .dump や、既存のテーブルに対する SQL CREATE ステートメントを出力する .schema などのコマンドがあります。

次のスニペットに示すように、SQLite コマンドをコマンドラインから実行することもできます。

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

詳細については、SQLite のウェブサイトにある sqlite3 コマンドラインのドキュメントをご覧ください。