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.