Upload
bernardo-fontes
View
3.074
Download
0
Embed Size (px)
DESCRIPTION
Palestra sobre a lib Model Mommy com descrição e exemplos de código sobre a sua utilização na criação de objetos representando models durante os testes do Django
Citation preview
Melhores Testes no Django
Apresentado o Model Mommy
Bernardo Fontes@bbfontes
@bbfontes – bernardofontes.net – github.com/berinhard
Por que testar?
https://github.com/MrMEEE/bumblebee-Old-and-abbandoned/commit/a047be85247755cdbe0acce6f1dafc8beb84f2ac
http://gizmodo.com/5048411/bsod-repeatedly-strikes-nine-inch-nails-concerts
Testes não são garantias
Testes não são garantias,mas são excelentes
indicadores
Por que falarsobre testes?
Só escrever testesnão basta
Teste também é código!
I'm watching!
Código deve serfácil de ler.
Código deve serfácil de ler.
Testes também!
Código deve serfácil de entender.
Código deve serfácil de entender.
Testes também!
Código deve serfácil de manter.
Código deve serfácil de manter.
Testes também!
Organização básica de um método de teste
No Django
1 – Configuração inicial do cenário de teste
No Django
2 – Execução da funcionalidade
No Django
3 – Asserções de validação
No Django
Tópico do dia: configuração inicial do cenário de teste com a criação de modelos
no Django
Model core.Person
Solução 1 - Criação dos objetos manualmente
Repetição de código em vários testes
Difícil manutenção
Solução 2 - Uso de fixtures para popular o
banco previamente
$ python manage.py dumpdata core.Person >> core/fixtures/persons.json
[{"pk": 1, "model": "core.person", "fields": {"bio": "Veio de algum lugar e foi para lugar nenhum", "appointment": "2013-07-02T18:30:32.960Z",
"name": "Bernardo", "gender": "M", "age": 24, "blog": "http://bernardofontes.net", "birthday": "1988-09-22", "birth_time":
"16:15:00", "nickname": "berinhard", "happy": false}}]
Gera trabalho externo aos testes
Gera acoplamento externo aos testes
Difícil manutenção depois de alterações nos models
Difícil manutenção depois de alterações nos models
DeserializationError: Problem installing fixture
'/home/bernardo/virtualenvs/moveleiros/project/src/core/fixtures/persons.j
son': Person has no field named u'birthday'
Solução 3 - Model Mommy
https://github.com/vandersonmota/model_mommy
pip install model_mommy
https://pypi.python.org/pypi/model_mommy
API para criar instâncias de models de maneira rápida
baseada em valores aleatórios
Model core.Person
Método make básico
Método make básico
Método make com sobreescrita
Método prepare
Criando vários objetos
Model core.Dog
Método make para FK
Método make com sobreescrita de FK
Método make com FK lookup
Método prepare com FK
Model core.Store
Objetos com relações ManyToMany
API para criar instâncias de models de maneira rápida
baseada em valores definidos por você evitando repetição de
código
mommy_recipes.py da app
Definição de um Recipe
Criando objetos com o make_recipe
Sobreescrita com o make_recipe
Vários objetos com o make_recipe
Sem persistência com o prepare_recipe
Recipes com FK
Recipes com callables
Suporte a Custom Fields
Sequences para campos unique
Ajude-nos a matar issues
Dê sua opinião e mande dúvidas da lista
http://bit.ly/12MU9Pv
Obrigado!!!
Bernardo [email protected]://bernardofontes.nethttp://github.com/berinhardhttp://twitter.com/bbfontes