É importante verificar a estabilidade do banco de dados do app e os dados do usuário ao criar bancos de dados usando a biblioteca de persistência do Room. Esta página discute como testar seu banco de dados e cumprir etapas de depuração para ajudar a passar nos testes.
Testar seu banco de dados
Há duas formas de testar seu banco de dados:
- Em um dispositivo Android;
- Na sua máquina de desenvolvimento host (não recomendado).
Para ver informações sobre testes específicos para migrações do banco de dados, consulte Como testar migrações.
Testar em um dispositivo Android
A abordagem recomendada para testar a implementação do banco de dados é gravar um teste JUnit executado em um dispositivo Android. Como esses testes não exigem a criação de uma atividade, sua execução será mais rápida que os testes de IU.
Ao configurar os testes, crie uma versão do seu banco de dados na memória para tornar os testes mais herméticos, conforme mostrado no exemplo a seguir.
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)); } }
Testar na máquina host
O Room usa a Biblioteca de Suporte SQLite, que fornece interfaces que correspondem às interfaces das classes do Android Framework. Essa compatibilidade permite que você transmita implementações personalizadas da Biblioteca de Suporte para testar suas consultas a bancos de dados.
Testar migrações
O Room oferece suporte a migrações incrementais de banco de dados para manter os dados existentes dos apps em situações em que atualizar o aplicativo muda o esquema do banco de dados. No entanto, uma migração definida incorretamente pode causar falhas no app. É importante testar as migrações do banco de dados do Room.
Depurar o banco de dados
Existem várias ferramentas e processos que podem ser usados para depurar um banco de dados.
Usar o Database Inspector
No Android Studio 4.1 e versões mais recentes, o Database Inspector permite inspecionar, consultar e modificar os bancos de dados do app enquanto ele está em execução. O Database Inspector é compatível com a versão do SQLite disponibilizada com o Android e inclui recursos especiais para usar com o Room:
- Use ações de gutter para executar rapidamente consultas nas classes DAO.
- Veja atualizações em tempo real no Database Inspector quando o app em execução fizer modificações nos dados.
Para saber mais sobre o Database Inspector, consulte Depurar o banco de dados com o Database Inspector.
Despejar dados da linha de comando
O SDK do Android inclui uma ferramenta de banco de dados sqlite3
para examinar os bancos de dados do
app. Ele inclui comandos como .dump
para imprimir o conteúdo de uma tabela e .schema
para imprimir a instrução SQL CREATE
de uma tabela existente.
Você também pode executar comandos SQLite na linha de comando, conforme mostrado no snippet abaixo:
adb -s emulator-5554 shell sqlite3 /data/data/your-app-package/databases/rssitems.db
Para ver mais informações, consulte a documentação
da linha de comando sqlite3
(em inglês), disponível no
site do SQLite.
Outros recursos
Para saber mais sobre como testar e depurar o banco de dados do Room, consulte estes recursos:
Postagens do blog
- Database Inspector: a ferramenta de banco de dados em tempo real que você estava esperando (link em inglês)
Vídeos
- Database Inspector (11 semanas do Android)