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.

Cómo probar 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));
    }
}

Cómo probar en tu máquina anfitrión

Room usa la biblioteca de compatibilidad de SQLite, que proporciona interfaces que coinciden con las de las clases del framework 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 probar tus migraciones

Room admite migraciones incrementales de base de datos para retener los datos de app existentes en casos en los que una actualización de la app cambia el esquema de la base de datos. Sin embargo, una migración definida de forma incorrecta puede provocar que falle tu app. Asegúrate de probar las migraciones de tu base de datos de Room.

Cómo depurar tu base de datos

Existen varias herramientas y procesos que puedes usar para depurar tu base de datos.

Cómo usar el Inspector de bases de datos

En Android Studio 4.1 y versiones posteriores, el Inspector de bases de datos te permite inspeccionar, buscar y modificar las bases de datos de tu app mientras esta se ejecuta. El Inspector de bases de datos es compatible con la versión de SQLite que se incluye con Android y contiene las siguientes funciones especiales para usar con Room:

  • Usa acciones del margen para ejecutar búsquedas rápidamente desde tus clases DAO.
  • Mira de inmediato las actualizaciones en tiempo real en el Inspector de bases de datos cuando tu app en ejecución realice cambios en los datos.

Si deseas obtener más información sobre el Inspector de bases de datos, consulta Cómo depurar tu base de datos con el Inspector de bases de datos.

Cómo volcar datos de la línea de comandos

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.

Recursos adicionales

Si quieres obtener más información para probar y depurar tu base de datos de Room, consulta los siguientes recursos adicionales:

Entradas de blog

Videos