Projeto de estudo do TDD com a linguagem Python.
🪧 Vitrine.Dev | |
---|---|
✨ Nome | Python TDD |
🏷️ Tecnologias | python |
🔥 Desafio | https://www.alura.com.br/curso-online-python-tdd-explorando-testes-unitarios |
-
Primeiro passo: Instalar as dependências do projeto:
pip install -r requirements.txt
-
Segundo passo: Executar Pytest:
pytest
projeto/
|
|--src/ (Código fonte)
| |
| |--tests/ (Pasta de testes)
| |
| |--classes/ (Classes base para teste)
| | |
| | |--funcionario.py (Classe a ser testada)
| |
| |--test_funcionario.py (Classe de teste)
|
|--.coveragerc (Arquivo de configuração do Pytest Cov)
|
|--pytest.ini (Arquivo de configuração do Pytest)
TDD é uma sigla para (Test Driven Development), ou Desenvolvimento Orientado a Testes. A ideia do TDD é que você trabalhe em ciclos. Estes ciclos ocorrem na seguinte ordem:
-
Primeiro, escreva um teste unitário que inicialmente irá falhar, tendo em vista que o código ainda não foi implementado;
-
Crie o código que satisfaça esse teste, ou seja: implemente a funcionalidade em questão. Essa primeira implementação deverá satisfazer imediatamente o teste que foi escrito no ciclo anterior;
-
Quando o código estiver implementado e o teste satisfeito, refatore o código para melhorar pontos como legibilidade. Logo após, execute o teste novamente.
-
Red: escreva um pequeno teste automatizado que, ao ser executado, irá falhar;
-
Green: implemente um código que seja suficiente para ser aprovado no teste recém-escrito;
-
Refactor: refatore o código, a fim dele ser melhorado, deixando-o mais funcional e mais limpo.
-
Existem diversos benefícios ao escrevermos os testes antes mesmo de realizar uma implementação.
-
Um dos benefícios é que, como você vai saber o que o código precisa fazer antecipadamente, evitando escrever código complexo ou que não siga os pré-requisitos de negócio.
-
Além disso, se você for deixar para testar as funcionalidades do seu código depois, você pode acabar não realizando os testes como deveria.
- Existem diversas ferramentas para realização de testes unitários. Alguns exemplos para diferentes linguagens são:
Linguagem Ferramenta .NET NUnit
PHP PHPUnit
Node.js Jest
Java JUnit
Python Pytest
-
O
Pytest
é a ferramenta mais utilizada para fazer testes unitários com o Python! -
O pytest é um framework de teste para python que provê soluções para executar testes e fazer validações diversas, com a possibilidade de estender com plugins e até rodar testes do próprio unittest do python.
-
É o queridinho da comunidade por sua flexibilidade, pela forma que usa fixtures e pela facilidade de estender suas funcionalidades.
pip install -U pytest
-
Executar testes:
pytest
Execução detalhada (Verbose)
pytest -V
Diz respeito a quanto do nosso código está coberto por testes. O ideal é que todas a funcionalidades sensíveis estejam cobertas por testes unitários.
Para verificar a cobertura do nosso código o pytest dispõe de uma extensão chamada (pytest cov).
pip install pytest-cov
Relatório simples:
pytest --cov=src/tests
Relatório completo:
pytest --cov=src/tests --cov-report term-missing
(Saída):
---------- coverage: platform win32, python 3.10.6-final-0 -----------
Name Stmts Miss Cover Missing
----------------------------------------------------------------
src\tests\classes\funcionario.py 20 0 100%
----------------------------------------------------------------
TOTAL 20 0 100%
Stmts
: número de linhas testadas no arquivo;Miss
: número de linhas NÃO testadas no arquivo;Missing
: números das linhas que não tem nenhum teste;Cover
: percentual de código testado.
Gerando relatório em HTML (Cria pasta htmlcov
)
pytest --cov=src/tests --cov-report html
Gerando relatório em XML (Cria arquivo report.xml
)
pytest --junitxml report.xml
Gerando relatório em XML (Cria arquivo coverage.xml
)
pytest --cov-report xml
Acesse a documentação do pytest.