Cuando creas bases de datos con la biblioteca de persistencias Room, debes verificar la estabilidad de la base de datos de tu app y los datos de tus usuarios. 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.
Prueba tu base de datos
Existen dos formas de probar tu base de datos:
- En un dispositivo que ejecuta Android
- En tu máquina de desarrollo anfitrión
Para obtener información sobre las pruebas específicas de las migraciones de bases de datos, consulta Cómo probar migraciones.
Prueba en un dispositivo que ejecuta Android
Para probar la implementación de tu base de datos, te recomendamos que escribas una prueba JUnit que se ejecute en un dispositivo que ejecute Android. Como estas pruebas no requieren una actividad, se ejecutan más rápido que las 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:
import kotlinx.coroutines.test.runTest @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<TestDatabase>(context) .setDriver(BundledSQLiteDriver()) .build() userDao = db.userDao() } @After fun closeDb() { db.close() } @Test fun writeUserAndReadInList() = runTest { val user = User(3, "george") userDao.insert(user) val byName = userDao.findUsersByName("george") assertEquals(byName.single(), user) } }
Prueba en tu máquina anfitrión (JVM)
Con Room KMP, puedes ejecutar pruebas de bases de datos en tu máquina de desarrollo anfitrión con pruebas JUnit de JVM locales. Esta configuración permite que tus pruebas se ejecuten más rápido, ya que elimina la sobrecarga de un emulador o dispositivo Android.
Para ayudar a mantener la coherencia, usa BundledSQLiteDriver. Este controlador incluye SQLite compilado desde la fuente, que usa la misma versión exacta de SQLite en tu máquina anfitrión, dispositivos Android y dispositivos iOS. El uso de este controlador elimina los problemas de falta de coincidencia de versiones.
Para configurar las pruebas de JVM, configura BundledSQLiteDriver en el compilador de tu base de datos de prueba:
val db = Room.inMemoryDatabaseBuilder<TestDatabase>() .setDriver(BundledSQLiteDriver()) .build()
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, consultar y modificar las bases de datos de tu app mientras 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 desde tus clases DAO.
- Cuando tu app en ejecución realice cambios en los datos, podrás ver de inmediato las actualizaciones en tiempo real en el Inspector de bases de 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
sqlite3 documentación de la línea de comandos, 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
- Inspector de bases de datos: (11 semanas de Android)