Cómo probar y depurar tu base de datos

Es importante verificar la estabilidad de la base de datos de tu app y los datos de tus usuarios cuando creas bases de datos con la biblioteca de persistencias Room. En esta página, se analiza cómo probar tu base de datos y realizar pasos de depuración para que tus pruebas sean exitosas.

Cómo probar tu base de datos

Puedes probar tu base de datos de 2 maneras:

  • En un dispositivo Android
  • En tu máquina de desarrollo de host (no recomendado)

Para obtener información sobre las pruebas específicas de las migraciones de bases de datos, consulta Cómo probar migraciones.

Pruebas en un dispositivo Android

El enfoque recomendado para probar la implementación de la base de datos es escribir una prueba JUnit que se ejecute en un dispositivo Android. Como estas pruebas no requieren la creación de una actividad, deberían ejecutarse más rápido que tus pruebas de IU.

Cuando configuras tus pruebas, debes crear una versión en memoria de tu base de datos para que las pruebas sean más herméticas, como se muestra en el siguiente ejemplo:

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

Pruebas en tu máquina host

Room usa la biblioteca de compatibilidad de SQLite, que proporciona interfaces que coinciden con las de las clases del marco de trabajo de Android. Esta compatibilidad te permite pasar implementaciones personalizadas de la biblioteca de compatibilidad con el fin de probar las consultas de tu base de datos.

Cómo depurar tu base de datos

El SDK de Android incluye una herramienta de base de datos sqlite3 para examinar las bases de datos de tu app. Incluye comandos como .dump para imprimir el contenido de una tabla y .schema con el objetivo de imprimir la declaración SQL CREATE de una tabla existente.

También puedes ejecutar comandos de SQLite desde la línea de comandos, como se muestra en el siguiente fragmento:

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

Para obtener más información, consulta la documentación de la línea de comandos sqlite3, disponible en el sitio web de SQLite.