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/a047be85247755cdb
e0acce6f1dafc8beb84f2ac
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 falar
sobre testes?
Só escrever testes
não basta
Teste também é código!
I'm watching!
Código deve ser
fácil de ler.
Código deve ser
fácil de ler.
Testes também!
Código deve ser
fácil de entender.
Código deve ser
fácil de entender.
Testes também!
Código deve ser
fácil de manter.
Código deve ser
fá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":...
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/virtua...
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 Fontes
falecomigo@bernardofontes.net
http://bernardofontes.net
http://github.com/berinhard
http://twi...
Melhorando Testes No Django Com O Model Mommy
Melhorando Testes No Django Com O Model Mommy
Melhorando Testes No Django Com O Model Mommy
Próximos SlideShares
Carregando em…5
×

Melhorando Testes No Django Com O Model Mommy

4.709 visualizações

Publicada em

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

Publicada em: Tecnologia

Melhorando Testes No Django Com O Model Mommy

  1. 1. Melhores Testes no Django Apresentado o Model Mommy Bernardo Fontes @bbfontes
  2. 2. @bbfontes – bernardofontes.net – github.com/berinhard
  3. 3. Por que testar?
  4. 4. https://github.com/MrMEEE/bumblebee-Old-and-abbandoned/commit/a047be85247755cdb e0acce6f1dafc8beb84f2ac
  5. 5. http://gizmodo.com/5048411/bsod-repeatedly-strikes-nine-inch-nails-concerts
  6. 6. Testes não são garantias
  7. 7. Testes não são garantias, mas são excelentes indicadores
  8. 8. Por que falar sobre testes?
  9. 9. Só escrever testes não basta
  10. 10. Teste também é código!
  11. 11. I'm watching!
  12. 12. Código deve ser fácil de ler.
  13. 13. Código deve ser fácil de ler. Testes também!
  14. 14. Código deve ser fácil de entender.
  15. 15. Código deve ser fácil de entender. Testes também!
  16. 16. Código deve ser fácil de manter.
  17. 17. Código deve ser fácil de manter. Testes também!
  18. 18. Organização básica de um método de teste
  19. 19. No Django
  20. 20. 1 – Configuração inicial do cenário de teste
  21. 21. No Django
  22. 22. 2 – Execução da funcionalidade
  23. 23. No Django
  24. 24. 3 – Asserções de validação
  25. 25. No Django
  26. 26. Tópico do dia: configuração inicial do cenário de teste com a criação de modelos no Django
  27. 27. Model core.Person
  28. 28. Solução 1 - Criação dos objetos manualmente
  29. 29. Repetição de código em vários testes
  30. 30. Difícil manutenção
  31. 31. Solução 2 - Uso de fixtures para popular o banco previamente
  32. 32. $ 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}}]
  33. 33. Gera trabalho externo aos testes
  34. 34. Gera acoplamento externo aos testes
  35. 35. Difícil manutenção depois de alterações nos models
  36. 36. Difícil manutenção depois de alterações nos models DeserializationError: Problem installing fixture '/home/bernardo/virtualenvs/moveleiro s/project/src/core/fixtures/persons.j son': Person has no field named u'birthday'
  37. 37. Solução 3 - Model Mommy https://github.com/vandersonmota/model_mommy
  38. 38. pip install model_mommy https://pypi.python.org/pypi/model_mommy
  39. 39. API para criar instâncias de models de maneira rápida baseada em valores aleatórios
  40. 40. Model core.Person
  41. 41. Método make básico
  42. 42. Método make básico
  43. 43. Método make com sobreescrita
  44. 44. Método prepare
  45. 45. Criando vários objetos
  46. 46. Model core.Dog
  47. 47. Método make para FK
  48. 48. Método make com sobreescrita de FK
  49. 49. Método make com FK lookup
  50. 50. Método prepare com FK
  51. 51. Model core.Store
  52. 52. Objetos com relações ManyToMany
  53. 53. API para criar instâncias de models de maneira rápida baseada em valores definidos por você evitando repetição de código
  54. 54. mommy_recipes.py da app
  55. 55. Definição de um Recipe
  56. 56. Criando objetos com o make_recipe
  57. 57. Sobreescrita com o make_recipe
  58. 58. Vários objetos com o make_recipe
  59. 59. Sem persistência com o prepare_recipe
  60. 60. Recipes com FK
  61. 61. Recipes com callables
  62. 62. Suporte a Custom Fields
  63. 63. Sequences para campos unique
  64. 64. Ajude-nos a matar issues
  65. 65. Dê sua opinião e mande dúvidas da lista http://bit.ly/12MU9Pv
  66. 66. Obrigado!!! Bernardo Fontes falecomigo@bernardofontes.net http://bernardofontes.net http://github.com/berinhard http://twitter.com/bbfontes

×