melhorando testes no django com o model mommy

Post on 18-Dec-2014

3.075 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

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

TRANSCRIPT

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 Fontesfalecomigo@bernardofontes.nethttp://bernardofontes.nethttp://github.com/berinhardhttp://twitter.com/bbfontes

top related