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

results matching ""

    No results matching ""