Testando Aplicações Django: Quando, Como e Onde?

8.080 visualizações

Publicada em

Testar

Publicada em: Tecnologia
0 comentários
10 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
8.080
No SlideShare
0
A partir de incorporações
0
Número de incorporações
5.345
Ações
Compartilhamentos
0
Downloads
64
Comentários
0
Gostaram
10
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Testando Aplicações Django: Quando, Como e Onde?

  1. 1. Testando Aplicações Django Como? Quando? Onde? Bernardo Fontes @bbfontes
  2. 2. @bbfontes – bernardofontes.net – falecomigo@bernardofontes.net
  3. 3. Por que testar?
  4. 4. Testes não são garantias
  5. 5. Testes não são garantias, mas são excelentes indicadores
  6. 6. Por que falarsobre testes?
  7. 7. Só escrever testes não basta
  8. 8. Teste também é código!
  9. 9. Im watching !
  10. 10. Código deve ser fácil de ler.
  11. 11. Código deve ser fácil de ler.Testes também!
  12. 12. Código deve serfácil de entender.
  13. 13. Código deve serfácil de entender. Testes também!
  14. 14. Código deve serfácil de manter.
  15. 15. Código deve serfácil de manter.Testes também!
  16. 16. #NOT
  17. 17. E dá para escrever bons testes no Django?
  18. 18. E dá para escrever bons testes no Django?
  19. 19. Recursos do Django● Views● Templates● Forms● Models● Signals● Template tags● Template filters● Settings● ...
  20. 20. Como começar a testar?
  21. 21. python manage.py startapp core
  22. 22. TUDO NUM ARQUIVO .PY SÓ!?!?! #WTF!!!
  23. 23. Organize seus testes
  24. 24. Test as Packages
  25. 25. Test as Packages
  26. 26. Test as Packages __init__.py:
  27. 27. Explícito é melhor que implícito eevita ambiguidades
  28. 28. Testando o tripé do Django● Views● Forms● Models
  29. 29. Views – O que testar?● Em 99% dos casos: ● Status code da resposta ● Template utilizado ● Contexto da resposta ● Persistência no banco de dados● Em alguns outros casos: ● Envio de e-mails ● Conteúdo da resposta ● Disparo de sinais ● Conexões com APIs externas
  30. 30. Views – Como testar?Django TestClient: ● get(path, data={}, follow=False, **extra) ● post(path, data={}, content_type=MULTIPART_CONTENT, follow=False, **extra) ● put(path, data={}, content_type=MULTIPART_CONTENT, follow=False, **extra) ● delete(path, follow=False, **extra) ● ... ● login(**credentials) ● logout()
  31. 31. Testando uma view básica
  32. 32. Mais complexidade com email
  33. 33. Mais complexidade comconteúdo da resposta
  34. 34. Testando uma view do admin
  35. 35. Forms – O que testar?● Validação do formulário ● Geral ● Por campo● Comportamento dos campos ● Ex: atributo choice do ModelChoiceField● Comportamento do domínio do form ● Ex: método save sobreescrito
  36. 36. Forms – Como testar?● Instanciar um objeto da classe do form com um dicionário de strings com os dados sendo passado por parâmetro
  37. 37. Forms – Code Snippet
  38. 38. Models – O que testar?● Validação do modelo● Métodos adicionados ao modelo● Estados da queryset● Cuidado para não testar o Django
  39. 39. Models – Como testar?● Instanciação de objetos daquele modelo normalmente e asserções através da API daquele objeto;
  40. 40. Models - Snippet
  41. 41. Sagacidades com testes! Estude TODO o pacote django.testhttps://docs.djangoproject.com/en/dev/intro/tutorial05/https://docs.djangoproject.com/en/dev/topics/testing/advanced/
  42. 42. Sagacidades com testes!Use os asserts que o Django já te fornece.
  43. 43. Sagacidades com testes! Extenda o TestCase do Djangoadicionando novos métodos de testes. Mas cuidado para não fazer #tudojuntoemisturado!
  44. 44. Sagacidades com testes!
  45. 45. Sagacidades com testes! Utilize o mock para simular comportamentos externos.http://www.voidspace.org.uk/python/mock/
  46. 46. Sagacidades com testes!
  47. 47. Sagacidades com testes! Pré-popule seu banco utilizando o model_mommy.http://github.com/vandersonmota/model_mommy/
  48. 48. Sagacidades para escrever testes!
  49. 49. Sagacidades com testes! Substitua o TestRunner do Django pelo Nose.http://code.google.com/p/python/python-nose/
  50. 50. Ainda faltou testarmos● Signals● Template filters● Template tags● Settings● Management commands● ModelAdmin● Forms widgets● ...
  51. 51. Obrigado!
  52. 52. Perguntas?

×