Aprenda a configurar e executar testes unitários para validar o funcionamento do modelo CRUD, sem acessar o banco de dados real. Descubra como simular o acesso ao banco de dados e isolar os testes para garantir consistência e previsibilidade.
Testes no CRUD
Nesta seção, vamos abordar a importância dos testes nas regras de negócio e funcionalidades do modelo CRUD, além de explicar como realizar esses testes de forma eficiente.
- Os testes são essenciais para garantir a correta execução das operações do modelo CRUD.
- Eles ajudam a identificar e corrigir possíveis falhas nas operações de criação, leitura, atualização e exclusão de dados.
- Os testes também contribuem para a manutenção da integridade e consistência dos dados no banco, o que é fundamental para o bom funcionamento do sistema.
Preparando o ambiente de testes
Nesta etapa, veremos como é importante preparar um ambiente adequado para a realização de testes no modelo CRUD, facilitando a validação das funcionalidades sem a necessidade de acessar o banco de dados.
- A criação de uma branch com mocks e stubs pré-configurados pode agilizar e simplificar o processo de testes.
- Organizar os arquivos de testes unitários em uma estrutura específica, como a pasta ‘tests’ dentro da pasta ‘model’, ajuda a manter a organização e facilita a execução dos testes.
- Realizar uma validação simples inicial, como testar se o ambiente está configurado corretamente, é uma prática recomendada para garantir a efetividade dos testes.
Primeiro teste buscando dados reais
Nesta seção, abordaremos o processo de criação do primeiro teste, que tem como objetivo validar o método ‘GetAll()’ para buscar dados reais no banco de dados.
- A importação do modelo de Produto no arquivo de testes e a instância de um objeto do modelo são passos fundamentais para a realização do teste.
- A execução do método ‘GetAll()’ com a expectativa de um resultado específico permite verificar a correta funcionalidade do método e a integridade dos dados retornados.
- A identificação de problemas, como a falta de acesso ao banco de dados, pode ser crucial para aprimorar o modelo e garantir seu correto funcionamento.
Problemas de testar com dados reais
Ao utilizar dados reais do banco de dados nos testes, surgem algumas questões e problemas que precisam ser considerados. Alguns desses problemas incluem o travamento do terminal em alguns momentos, falhas nos testes devido a alterações nos dados do banco e a lentidão dos testes devido ao acesso direto ao banco de dados.
- O travamento do terminal ocorre devido à conexão com o banco que permanece aberta mesmo após os testes, causando falhas no processo de teste.
- Alterações nos dados do banco podem levar a falhas nos testes, uma vez que os testes passam a esperar valores diferentes, comprometendo a consistência dos mesmos.
- O acesso direto ao banco de dados torna os testes mais lentos e pode causar efeitos colaterais indesejados nos dados, prejudicando a eficiência dos testes.
Criando um mock da conexão com banco de dados
Para evitar os problemas decorrentes do uso de dados reais do banco nos testes, é essencial criar um mock da conexão com o banco de dados. Esse processo envolve algumas etapas que garantem a simulação do acesso ao banco de dados, fornecendo dados consistentes e previsíveis para os testes.
- Criar uma variável que representará o mock da conexão do banco de dados.
- Simular o método ‘ObterConexao()’, que normalmente retornaria a conexão real com o banco, dentro do mock.
- Retornar uma função que representará o mock do método ‘Select()’ do pacote Knex, dentro do método mockado.
- Configurar a função mockada para retornar um array vazio, simulando uma tabela sem dados.
- Passar a variável de conexão mockada para dentro do modelo de Produto, substituindo a conexão real.
Isolando e Simulando Funcionalidades com Mocks
Ao utilizar funções e mocks, é possível isolar e simular cada parte da conexão e dos métodos utilizados pelo modelo, permitindo total controle e previsibilidade nos testes.
- Utilização de funções e mocks para isolar e simular corretamente cada parte da conexão e dos métodos
- Controle e previsibilidade nos testes ao utilizar dados simulados em vez de buscar no banco de dados real
Testando o Método Insert
Com o banco de dados mockado, é viável criar testes para validar o método ‘Store()’, responsável por inserir novos produtos no banco, sem a necessidade de gravar no banco de dados real.
- Validação do método ‘Store()’ para inserir novos produtos no banco de dados
- Criação de testes sem a necessidade de gravar no banco de dados real
Considerações Finais
Isolar o acesso ao banco de dados e criar mocks é uma tarefa complexa, mas uma vez preparado o mock da conexão, torna-se mais fácil desenvolver e executar novos testes para os demais métodos e modelos.
- Complexidade na criação de mocks e isolamento do acesso ao banco de dados
- Facilidade de desenvolver e executar novos testes após a preparação do mock da conexão
Conclusão
Após a configuração dos mocks e a simulação do acesso ao banco de dados, fica mais fácil desenvolver e executar testes para validar o funcionamento das regras de negócio e funções do modelo. Além disso, a próxima aula abordará a cobertura de testes, incluindo como medir e melhorar a cobertura para garantir a validação completa da aplicação.