Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Minha sugestão

Olá. Estou desenvolvendo testes para a minha aplicação. Preciso alterar o código de teste automatizado de uma classe, que utiliza um banco de dados em memória, alterando de modo a utilizar o banco de dados da aplicação, MySQL. Você pode me orientar quanto ao passo a passo sem me dá o código?

2 respostas

Oi, Gilvaneide, tudo bem?

Se você quer que seus testes automatizados usem MySQL em vez do banco em memória, dá pra fazer sem grandes complicações, mas é bom cuidar de alguns pontos para evitar problemas. Abaixo deixei alguns passos:

  1. Banco exclusivo para testes
    Crie um banco só para a suíte de testes (ex.: minha_app_test) e um usuário que tenha acesso apenas a ele. Assim, você elimina o risco de apagar ou alterar dados de desenvolvimento ou produção.

  2. Configuração do ambiente
    Ajuste o perfil/arquivo de configuração dos testes (por exemplo, application.properties ou application.yml no Spring Boot) para apontar para esse banco. Vale usar variáveis de ambiente para guardar host, usuário e senha, evitando expor credenciais.

  3. Dependências
    Confira se o projeto já tem tudo o que precisa para se conectar ao MySQL. Em Java, por exemplo, é o driver JDBC do MySQL.

  4. Schema atualizado
    Antes de rodar os testes, garanta que o banco tenha a estrutura correta. Ferramentas como Flyway ou Liquibase ajudam a aplicar migrações automaticamente.

  5. Isolamento dos dados
    Cada teste deve começar num estado limpo. Dá para fazer isso com transações que dão rollback ao final ou limpando as tabelas entre um teste e outro.

  6. Diferenças entre bancos
    Lembre-se que MySQL pode se comportar diferente do banco em memória: ordenação, collation, charset e precisão de datas são exemplos de coisas que mudam.

  7. Execução dos testes
    Com tudo configurado, rode a suíte e veja se o comportamento está de acordo. Se possível, teste também no CI/CD usando um MySQL descartável (Docker ou Testcontainers) para garantir que funciona fora da sua máquina.

Seguindo essa linha, você mantém seus testes confiáveis e mais próximos da realidade da aplicação.

Espero ter ajudado.

Qualquer dúvida que surgir, compartilhe no fórum. Abraços e bons estudos!

Conteúdos relacionados

Os links estão em inglês, mas você poderá usar a tradução automática do navegador

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!
solução!

Aqui estão os passos principais que você precisará seguir:

  1. 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.

  1. 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.

  1. 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.