Guardians-DSC / LCCBot

Bot do discord para acompanhamento do status do LCC.
MIT License
9 stars 1 forks source link

[Test] Implementar teste na API para o /schedule #32

Open Thulio-Carvalho opened 4 years ago

Thulio-Carvalho commented 4 years ago

Descreva a feature em detalhes

Necessidade da feature:

Como ela pode ser implementada:

Contexto adicional:

igorlimam commented 4 years ago

Descreva a feature em detalhes

Testes de unidade executam o código de forma controlada com o intuito de comparar uma saída esperada a atual. O estado do sistema é ditado anteriormente para que possa se concentrar apenas na funcionalidade sob teste. Isso significa que cada teste possui uma descrição, anterior à execução das funções testadas, do que é necessário para que a situação investigada ocorra.

O controle do estado do sistema ocorre pelo uso de mocks proporcionados pela ferramenta de teste.

Necessidade da feature:

A implementação de testes proporciona maior confiabilidade a um código. Estressar uma funcionalidade através deles oferece debug codificado. Além disso, se bem escrito, serve como uma documentação em código da funcionalidade, já que cada possibilidade de execução deve ser explorada e verificada.

Os testes feitos nessa funcionalidade devem verificar a corretude da implementação através do estresse de diferentes saídas proporcionadas por ela. Dito isso, cada teste confirmará o comportamento esperado sob determinadas condições, corroborando com o objetivo geral dos testes.

Como ela pode ser implementada:

Uma ferramenta simples e poderosa para a implementação de testes é o pytest. Além disso, uma estratégia de testes que funciona muito bem é a GIVEN-WHEN-THEN.

Pytest oferece um padrão para mocks, porém, os mocks do unittest são mais poderosos e simples de serem usados

O pytest será a coluna vertebral do testes, os mocks servirão para controlar o estado do sistema durante o teste. Note que cada teste possui três fases:

Given (dado que): é o preparo do sistema, nessa parte, é instanciado tudo o que for necessário para que o estado de interesse aconteça

When (quando ___ acontece): é a execução da função de teste, aqui é onde será extraído o nosso "actual" ou saída verdadeira da funcionalidade.

Then (então ____ são obtidos): é a parte de comparação do teste, nessa fase verificamos se a saída da função estressada corresponde com o esperado dela. É de extrema importância que essa parte possua único e exclusivamente comparações, artifícios do python como all e any são recomendados para comparações em conjuntos.

Contexto adicional:

Um diretório "tests" exclusivo para testes deve ser criado, juntamente com o padrão de que todo módulo de teste, bem como as funções de teste, comecem com o nome "test".

Thulio-Carvalho commented 4 years ago

Ótima documentação de issue!