Testes Django
Testar uma aplicação web é uma tarefa bem complexa, existem diversas camadas de lógica, do HTTP, a validação de formulário e renderização de template. Com o Framework de testes do Django é possível simular requests, inserir dados no banco e verificar se o seu código está fazendo o que deveria ser feito.
Testes do Django usam a lib padrão unittest
, com isso precisamos criar nossos testes baseado em classes.
Exemplo:
from django.test import TestCase
from myapp.models import Cadastro
# Nossa classe herdou de TestCase que é uma subclasse do unittest.TestCase
# a diferença é que cada teste roda em uma transação que garante isolamento para os testes
class TestExemplo(TestCase):
def test_cadastro_ativo_eh_verdadeiro_por_padrao(self):
cadastro = Cadastro.objects.create(email='[email protected]')
self.assertTrue(cadastro.ativo)
def test_cadastro_ativo_eh_falso_ao_chamar_metodo_desativar(self):
cadastro = Cadastro.objects.create(email='[email protected]')
self.assertTrue(cadastro.ativo)
cadastro.desativar()
self.assertFalse(cadastro.ativo)
Onde os testes devem ficar?
Quando criamos uma aplicação utilizando o comando startapp
é gerado um arquivo tests.py
.
Esse arquivo é suficiente se você tem poucos testes para a sua aplicação, porém se seus crescerem é melhor criar um pacote tests
dentro do app.
Um exemplo seria:
exemplo_app
├── __init__.py
├── admin.py
├── forms.py
├── models.py
├── tests
│ ├── __init__.py
│ ├── test_forms.py
│ └── test_models.py
2 directories, 7 files
Você pode usar o que melhor atender as suas necessidades, lembre-se disso.
Executando os testes
Uma vez que os testes foram escritos, você pode executar assim:
$ ./manage.py test
# Executar todos os testes da app exemplo
$ ./manage.py test exemplo_app.tests
# Executar uma classe de teste
$ ./manage.py test exemplo_app.tests.TestExemplo
# Executar um metodo de teste
$ ./manage.py test exemplo_app.tests.TestExemplo.test_cadastro_ativo_eh_verdadeiro_por_padrao