Testes unitários são basicamente umas das formas de saber se o código da aplicação que está sendo construída está no caminho correto, baseado nos requerimentos. Normalmente, e de forma correta, se constrói os testes para depois criar o código da aplicação, usando o teste em si como referência de funcionalidade. Como os testes funcionam Demorou para entrar na minha cabeça como os testes unitários funcionam. Eu sempre me perguntava: — Como assim, primeiro você cria os testes para depois criar o código? Isso não entra na minha cabeça! Isso é bem verdade, porém vamos usar uma analogia usando como exemplo uma fábrica metalúrgica com uma linha de montagem: Por exemplo uma empresa recebe o requisito para criar uma peça com todas as dimensões como requisitos, altura, largura e também o diâmetro da parede da mesma. Essas requisições são super importantes para que a peça se encaixe corretamente em um motor ou outra engrenagem, sendo assim, ficando perfeitamente adequada para os requisitos do cliente. Sendo torneiro mecânico em 2008 precisei usar testes para praticamente todas as peças que eu produzia para que as mesmas ficassem dentro do padrão do desenho/gabarito enviado pelo cliente. Era usado um molde com as especificações corretas onde se encaixavam as peças que eram feitas. Assim, junto com as medidas especificadas se sabia se o produto feito estava correto. Dessa forma ficou mais fácil entender o porquê de criar os testes primeiro para depois o código. Os testes são como o gabarito, o código são as peças criadas que serão testadas baseadas nos testes criados anteriormente (gabarito). Agora, creio que ficou mais fácil entender. Testando uma aplicação REST API Django Agora, vamos supor que recebemos um requisito para dois endpoints de uma aplicação de turismo: Os requisitos são como a seguir: Como podemos ver, o modelo Comment tem um relacionamento de um para muitos com a tabela Destinations assim como os seus respectivos campos. Sendo assim, iniciaremos os testes para os modelos representados acima: tourism/tests/test_models.py Como visto acima, foi herdada a classe TestCase do Django para poder testar os dois modelos Comment e Destinations na classe TestModels. Na função test_destinations_model(self) foi alocado o modelo Destinations em seu escopo, com uma query de criação feita no banco de dados de testes, usando o ORM do Django e com seus respectivos campos. Logo abaixo, é usado a função asserEquals(param1, param2) para saber se a mesma está sendo criada corretamente. Neste caso a função assertEquals() serve como o gabarito exemplificado na analogia e exemplo mencionado acima, para testar se o mesmo está sendo criado como deveria no banco de dados de testes. Vamos testar para ver se o teste retorna como correto, “OK”: Como visto, ao tentar rodar os testes o mesmo não funcionou pois não tem oque testar ainda, as classes/tabelas ainda não foram criadas. Agora vamos criar as tabelas como no requerimento e seus consecutivos relacionamentos e rodar os testes novamente: tourism/models.py: Depois de criar os modelos e fazer as migrations vamos testar para ver se os valores batem com os testes: Criando testes para os endpoints da aplicação REST API Agora para testar os endpoints desta aplicação sera necessário criar a representação dos dados da mesma forma que foi efetuado para testar os modelos. E também a representação dos dados e URLs para testar o CRUD em cada endpoint (Destinations e Comments). Criando esse setup dentro da classe de testes, sera necessário criar funções que testam cada operação CRUD dos endpoints. No código abaixo foi criado quatro funções para cada endpoint usando os dados adicionados ao método Setup(), sendo assim, testando cada método de requisição Create, Read, Update e Delete: tourism/tests/test_api.py: Seguindo os exemplos acima sabemos que ao rodar o teste o mesmo não passará, pois ainda não foi criado os endpoints de Destinations e Comments. Desta maneira foi criado as URLs do app e adicionado na URL principal: project_name/urls.py: project_name/url.py Também sera criados os serializers e também os viewsets para que os dados sejam serializados pelo framework django-rest-framework e aceitem postagens e edições de dados em formato JSON. tourism/api/serializers.py tourism/api/viewsets.py: Agora que os dados necessários foram adicionados para a serialização dos mesmos, os testes serão aceitos corretamente fazendo entender que os endpoints estão funcionando corretamente: Voce pode ter acesso ao codigo deste artigo aqui
Copie e cole este URL em seu site WordPress para incorporar
Copie e cole este código no seu site para incorporar