Testes com
      Django e Object Factory

II Pylestras
     Palestrante
            Italo Maia




         http://www.italomaia.com/
         http://www.python.org.br
         http://pug-ce.python.org.br
Testes!
Software com Testes é

+ Caro
+ Trabalhoso

+ Barato
+ Confiável
+ Fácil evoluir
+ Trabalho em equipe
                       TDD
                       TDD
“Mas eu não gosto 
de escrever testes!”
por Desenvolvedor 
Genérico
Não Tolere Isso!

Código  sem  testes 
é  ruim  para  todo 
mundo!
Há motivos para não 
 gostar de testes...
      + Uma ferramenta para aprender
      + Código para escrever
      + Precisa configurar o ambiente
      + Demora
E o Python? [1]

DocTest
Testes  embutidos  no 
próprio código.

Prático  para      testar 
funções simples.
E o Python? [2]

UnitTest
Testes  escritos    em 
módulos próprios.

Código  organizado  e 
extensível.
UnitTest
Django, Testes e Você

             UnitTest Extendido
         Integração com Aplicativos
          Integração com o Models
           Banco de Testes Isolado
            Testes Por Aplicativo
Como Faz?
                        Testes ficam no tests.py
  projeto
  → app                 O Django te permite rodar 
  → → __init__.py       testes    por     projeto, 
  → → models.py         aplicativo,  TestCase  ou 
  → → tests.py          Método. 
  → → views.py


O comando abaixo executa os testes para você
python manage.py test [aplicativo[.TestCase[.metodo]]]
Massa! E Qual o 
           Problema?
Os dados do banco são limpos       Fixture
a cada teste.
Se  quiser  popular  o  banco      JSON
automaticamente você precisa       YAML
utilizar  fixtures  ou  popular 
manualmente.
Fixtures
Fixtures
Object Factory

“Fixtures On The Fly!”
O modelo muda, os testes não!
Fácil, extensível!              Factory Girl
Não depende de arquivos 
externos!
Model Mommy
Object Factory for Django (1.1 e 1.2)
Criado por Vanderson Motta
Vários contribuidores
Evoluindo rápidamente
Suporte a relações! *
Já Suporta *

SlugField CharField TextField URLField
  EmailField FileField ImageField
   ForeignKey ManyToManyField
            OneToOneField
 DateField DateTimeField BooleanField
           All Numeric Fields
Como Usar?
Por Baixo dos Panos
ModelMommy  funciona  com  introspecção  dos 
campos  do  Modelo.  Para  cada  campo,  há  um 
“gerador de dados” mapeado.
model_mommy/generators.py


  make_one e make_many são generators!
Exemplo Completo!
Generators
Funções simples que devolvem um valor para popular 
um campo do modelo. 
required busca valores do campo e devolve para o 
generator.
Sobrescrevendo Geradores
Dúvidas?
https://github.com/vandersonmota/model_mommy
https://github.com/italomaia/model_mommy/
http://docs.djangoproject.com/en/1.2/topics/testing/
http://www.deviantart.com/
http://tr1ckxi3.deviantart.com/
http://ech­ztx.deviantart.com/
http://cerberusphoenix.deviantart.com/
http://usoppthegreat.deviantart.com/
http://era­artwork.deviantart.com/
http://shabarov.deviantart.com/

Django Object factory