django object factory

24
Testes com Django e Object Factory http://pug-ce.python.org.br http://www.python.org.br Palestrante Italo Maia II Pylestras http://www.italomaia.com/

Upload: italomaia

Post on 04-Jul-2015

847 views

Category:

Technology


2 download

TRANSCRIPT

Testes comDjango e Object Factory

http://pug-ce.python.org.br

http://www.python.org.br

Palestrante

Italo Maia

II Pylestras

http://www.italomaia.com/

Testes!

Software com Testes é

+ Caro+ Trabalhoso

+ Barato+ Confiável+ Fácil evoluir+ Trabalho em equipe TDDTDD

“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 ExtendidoIntegração com AplicativosIntegração com o ModelsBanco de Testes Isolado

Testes Por Aplicativo

Como Faz?

projeto → app   → → __init__.py   → → models.py   → → tests.py   → → views.py

Testes ficam no tests.py

O Django te permite rodar testes  por  projeto, aplicativo,  TestCase  ou Método. 

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 a cada teste.Se  quiser  popular  o  banco automaticamente você precisa utilizar  fixtures  ou  popular manualmente.

Fixture

JSONYAML

Fixtures

Fixtures

Object Factory

“Fixtures On The Fly!”

O modelo muda, os testes não!

Fácil, extensível!

Não depende de arquivos externos!

Factory Girl

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 URLFieldEmailField FileField ImageFieldForeignKey ManyToManyField

OneToOneFieldDateField 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!

GeneratorsFunçõ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_mommyhttps://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/