Aqui estão os passos principais que você precisará seguir:
- Configuração do Ambiente de Teste
Primeiro, você precisa garantir que seu ambiente de teste saiba como se conectar ao MySQL, em vez do banco de dados em memória.
Configuração do MySQL: Certifique-se de que o MySQL está instalado e rodando em sua máquina local ou em um servidor de teste. Você precisará de um banco de dados de teste, um usuário e uma senha dedicados.
Arquivo de Configuração: No seu projeto, localize o arquivo de configuração de testes. Geralmente é um arquivo separado (como application-test.properties ou test.yml). Nele, substitua as configurações do banco de dados em memória pelas do MySQL:
URL de Conexão (JDBC): Altere o url para apontar para o seu banco de dados MySQL (ex: jdbc:mysql://localhost:3306/meu_banco_teste).
Usuário e Senha: Configure o username e password do seu usuário de teste no MySQL.
Driver: Certifique-se de que o driver JDBC do MySQL está configurado corretamente.
- Gerenciamento do Esquema (Schema)
Em um banco de dados em memória, o esquema é geralmente criado e destruído rapidamente. Com o MySQL, o processo é um pouco diferente.
Criação do Esquema: Você pode ter scripts SQL que criam as tabelas e o esquema do seu banco de dados. Configure seu ambiente de teste para executar esses scripts antes de cada suíte de testes (por exemplo, usando flyway ou liquibase).
Limpeza dos Dados: Antes de cada teste (ou suite de testes), é fundamental que o banco de dados esteja em um estado limpo e conhecido. Você pode fazer isso de duas maneiras:
Truncate/Delete: Execute comandos TRUNCATE TABLE ou DELETE FROM para remover todos os dados das tabelas, mantendo a estrutura.
Recriação do Banco de Dados: Se a sua estrutura muda com frequência, você pode configurar o ambiente para destruir e recriar o banco de dados de teste a cada execução.
- Ajustes no Código de Teste
A maioria das alterações será na configuração, mas seu código de teste também pode precisar de pequenos ajustes.
Transações de Teste: Verifique se os testes estão rodando dentro de transações. Isso permite que todas as alterações feitas durante o teste sejam revertidas no final, garantindo que o próximo teste comece com um banco de dados limpo. A maioria dos frameworks de teste já faz isso por padrão.
Dados Iniciais (Mock Data): Seus testes podem precisar de dados pré-carregados. Em vez de usar scripts em memória, você pode usar uma biblioteca como o Testcontainers para iniciar um contêiner Docker do MySQL com dados iniciais, ou carregar os dados a partir de arquivos SQL antes de cada teste.
Verificação de Exceções: Testes que esperam exceções de banco de dados podem se comportar de forma diferente. Por exemplo, uma exceção de violação de chave primária no MySQL pode ser ligeiramente diferente da exceção de um banco de dados em memória. Revise os testes que verificam comportamentos específicos do banco de dados.
Dicas Adicionais
Aceleração dos Testes: Rodar testes contra um banco de dados real é mais lento. Considere manter os testes unitários que não dependem do banco de dados separados dos testes de integração.
Isolamento: Cada teste deve ser independente. Certifique-se de que a falha em um teste não afeta o resultado dos outros.
Ao seguir esses passos, você garantirá que seus testes automatizados estão validando o comportamento da sua aplicação em um ambiente muito mais próximo do real.