Testar e depurar seu banco de dados

É 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

Vídeos