SlideShare uma empresa Scribd logo
1 de 42
Baixar para ler offline
In Tests We Trust:
começando com
TDD, mocks e mais
@anapaulagomess
Ana Paula Gomes
oi!
Software Engineer @LoadSmart
Code Reviewer @Udacity
Msc Computer Science @UFMG
Organizer @PyData
Perna de pau @Boas Esportes
“Se você não faz testes, seu código não é
profissional.”
Ex-colega de trabalho para um candidato
Mas que raios é TDD?
Test-Driven Development
Test-Driven Development
● Escreva um teste (unitário) para a funcionalidade que você deseja
○ O teste irá falhar, afinal a funcionalidade ainda não existe!
● Escreva o código da funcionalidade até que o teste passe
○ Utilize baby steps!
● Refatore o código
○ A ideia é deixá-lo bem estruturado!
Estranho ou não?
● Começar exige um certo esforço
● A prática leva a naturalidade
● Se você achou difícil, está tudo bem
Mas porquê é importante?
● Te ajuda a moldar o design da aplicação
● Dá mais confiabilidade e qualidade a aplicação
● Torna melhor a manutenção do código (para refatorar ou corrigir bugs)
talk is cheap - show me the code
dojo Você deve desenvolver um
identificador de gênero, dado um
nome próprio (utilizando uma API)um problema real para começar
Por onde você começaria?
Talvez fazendo logo uma requisição?
requests.get('https://api.genderize.io/?name=ana')
Baby Steps
Qual o menor teste possível?
O menor teste possível
Dado um nome, retorna o gênero.
entrada: Ana
saída: female
O menor teste possível
Dado um nome, retorna o gênero.
Utilizando
pytests!
O menor teste possível
Dado um nome, retorna o gênero.
Utilizando
pytests!
AAA: Arrange, Act & Assert
O menor teste possível
Dado um nome, retorna o gênero.
Utilizando
pytests!
Importante!
● AAA
○ Arrange: prepare tudo o que você precisa para executar o seu teste
○ Act: execute o trecho de código a ser testado
○ Assert: verifique o resultado!
● Os testes devem estar em uma pasta separada
○ Por convenção, o nome da pasta é chamada de tests
● Os arquivos de testes devem começar com o prefixo
test_nome_do_modulo_testado.py
○ As bibliotecas de teste buscam pelo prefixo test_
● Os nomes dos testes importam e precisam ser expressivos!
○ Os testes devem ser a documentação viva do código
Continuando...
pytest tests/
Falhou!
Isso aí! o/
Fizemos o teste falhar. Vamos fazê-lo passar!
Implementamos apenas a funcionalidade necessária para fazer o teste passar!
Continuando...
pytest tests/
Testes
passando!
Situações que poderiam existir no “detector”
● Retornar “female” quando o nome for feminino
● Retornar “male” quando o nome for masculino
● Buscar apenas pelo primeiro nome
● Lançar uma exceção quando o nome for “” ou None
● Retornar “unidentified” quando o nome não tiver o gênero identificável
Continuando o menor teste possível
Dessa vez, dado um nome masculino, retorna o gênero “male”.
Utilizando
pytests!
Continuando...
pytest tests/
Falhou!
Isso aí! o/
Fizemos o teste falhar. Vamos fazê-lo passar!
Continuando...
pytest tests/
Testes
passando!
Quais as desvantagens da nossa abordagem atual?
● Tempo de execução
● Os testes não são offline
● Não atende as limitações do negócio
○ Muitas APIs, assim como essa, tem número de requests limitadas
Test Doubles: Mocks & Stubs
Mocks
import mock
Algumas regras de ouro sobre Mocks
● Mock o que você não pode testar
● Mock dependências externas
● Evite mockar as suas classes
○ Mockistas x Classistas
talk is cheap - show me the code
O que podemos mockar?
requests.get('https://api.genderize.io/?name=ana')
Mockando a nossa requisição
Não esquecer
do import mock
Mockando a nossa requisição Arrange
Act
Assert
Continuando...
pytest tests/
Testes
passando!
Como ficou o código!
https://github.com/anapaulagomes/in-tests-we-trust
Turbinando os seus
testes!
Algumas bibliotecas para ajudar nos
testes
Bibliotecas para ajudar nos testes
● Pytest
○ fixtures
○ coverage
● Faker
● vcrpy
● freezegun
● Tox + Pyenv + Virtualenv
Referências:
blog.paulagrangeiro.com.br/5-libs-essenciais-para-testes-unit%C3%A1rios-python-f2ba8326e76a
klauslaube.com.br/2016/04/26/o-simples-e-poderoso-pyenv.html
Pra lembrar!
Pra lembrar!
● A maior vantagem do TDD é deixar surgir o design do software
○ Buscando melhor manutenção e objetividade
● Qualidade do código / manutenibilidade
○ A garantia após fazer uma alteração: não tem preço
● Começar pode ser difícil - e está tudo bem - pratique!
Para Casa
● Test Driven Development: By Example
● Growing Object-Oriented Software, Guided by Tests
● Dar uma olhada:
○ Continuous Integration
○ Continuous Delivery
○ Cobertura de testes
● Código da palestra completo em:
github.com/anapaulagomes/in-tests-we-trust
valeu =)
deixe o seu feedback após o sinal: @anapaulagomess

Mais conteúdo relacionado

Mais procurados

Mtc docker - utilizando no seu dia a dia
Mtc   docker - utilizando no seu dia a diaMtc   docker - utilizando no seu dia a dia
Mtc docker - utilizando no seu dia a diaRafael Chiavegatto
 
Por que testar é importante e algumas boas práticas
Por que testar é importante e algumas boas práticasPor que testar é importante e algumas boas práticas
Por que testar é importante e algumas boas práticasLucas Caton
 
TDD: A Essência do Mantra
TDD: A Essência do MantraTDD: A Essência do Mantra
TDD: A Essência do MantraDionatan default
 
Nunca foi tao facil testar
Nunca foi tao facil testarNunca foi tao facil testar
Nunca foi tao facil testarElias Nogueira
 
Testes em ambiente agil - TechTalks ADP Labs
Testes em ambiente agil - TechTalks ADP LabsTestes em ambiente agil - TechTalks ADP Labs
Testes em ambiente agil - TechTalks ADP LabsElias Nogueira
 
Minas Testing Conference 2015 - Visual Regression Testing em ambientes na nuvem
Minas Testing Conference 2015 - Visual Regression Testing em ambientes na nuvemMinas Testing Conference 2015 - Visual Regression Testing em ambientes na nuvem
Minas Testing Conference 2015 - Visual Regression Testing em ambientes na nuvemStefan Teixeira
 
TDD: Técnicas, Benefícios e Limitação
TDD: Técnicas, Benefícios e Limitação TDD: Técnicas, Benefícios e Limitação
TDD: Técnicas, Benefícios e Limitação Icaro Camelo
 
TDD para "meros mortais"
TDD para "meros mortais"TDD para "meros mortais"
TDD para "meros mortais"thiagobapt
 
Clean Code: Por um mundo com códigos melhores - The Developers Conference - P...
Clean Code: Por um mundo com códigos melhores - The Developers Conference - P...Clean Code: Por um mundo com códigos melhores - The Developers Conference - P...
Clean Code: Por um mundo com códigos melhores - The Developers Conference - P...Thiago Barradas
 
Quero ser um caçador de bugs
Quero ser um caçador de bugsQuero ser um caçador de bugs
Quero ser um caçador de bugsSarah Pimentel
 
Como integrar um Agile Tester no seu time
Como integrar um Agile Tester no seu timeComo integrar um Agile Tester no seu time
Como integrar um Agile Tester no seu timeElias Nogueira
 
Agile Testing - entregando valor do início a fim
Agile Testing - entregando valor do início a fimAgile Testing - entregando valor do início a fim
Agile Testing - entregando valor do início a fimElias Nogueira
 
[MTC 2021] Vieses da qualidade - Daniele Vieira Fiorot
[MTC 2021] Vieses da qualidade -  Daniele Vieira Fiorot[MTC 2021] Vieses da qualidade -  Daniele Vieira Fiorot
[MTC 2021] Vieses da qualidade - Daniele Vieira Fiorotminastestingconference
 
Testes em todos os niveis de planejamento
Testes em todos os niveis de planejamentoTestes em todos os niveis de planejamento
Testes em todos os niveis de planejamentoElias Nogueira
 
Testes de software
Testes de softwareTestes de software
Testes de softwareVitor Castro
 

Mais procurados (20)

Mtc docker - utilizando no seu dia a dia
Mtc   docker - utilizando no seu dia a diaMtc   docker - utilizando no seu dia a dia
Mtc docker - utilizando no seu dia a dia
 
Por que testar é importante e algumas boas práticas
Por que testar é importante e algumas boas práticasPor que testar é importante e algumas boas práticas
Por que testar é importante e algumas boas práticas
 
TDD: A Essência do Mantra
TDD: A Essência do MantraTDD: A Essência do Mantra
TDD: A Essência do Mantra
 
Nunca foi tao facil testar
Nunca foi tao facil testarNunca foi tao facil testar
Nunca foi tao facil testar
 
Testes em ambiente agil - TechTalks ADP Labs
Testes em ambiente agil - TechTalks ADP LabsTestes em ambiente agil - TechTalks ADP Labs
Testes em ambiente agil - TechTalks ADP Labs
 
TDD com Python
TDD com PythonTDD com Python
TDD com Python
 
Minas Testing Conference 2015 - Visual Regression Testing em ambientes na nuvem
Minas Testing Conference 2015 - Visual Regression Testing em ambientes na nuvemMinas Testing Conference 2015 - Visual Regression Testing em ambientes na nuvem
Minas Testing Conference 2015 - Visual Regression Testing em ambientes na nuvem
 
Tdd na veia
Tdd na veiaTdd na veia
Tdd na veia
 
TDD: Técnicas, Benefícios e Limitação
TDD: Técnicas, Benefícios e Limitação TDD: Técnicas, Benefícios e Limitação
TDD: Técnicas, Benefícios e Limitação
 
RealDay: Introduction to TDD
RealDay: Introduction to TDDRealDay: Introduction to TDD
RealDay: Introduction to TDD
 
TDD para "meros mortais"
TDD para "meros mortais"TDD para "meros mortais"
TDD para "meros mortais"
 
Clean Code: Por um mundo com códigos melhores - The Developers Conference - P...
Clean Code: Por um mundo com códigos melhores - The Developers Conference - P...Clean Code: Por um mundo com códigos melhores - The Developers Conference - P...
Clean Code: Por um mundo com códigos melhores - The Developers Conference - P...
 
Quero ser um caçador de bugs
Quero ser um caçador de bugsQuero ser um caçador de bugs
Quero ser um caçador de bugs
 
TDD
TDDTDD
TDD
 
Como integrar um Agile Tester no seu time
Como integrar um Agile Tester no seu timeComo integrar um Agile Tester no seu time
Como integrar um Agile Tester no seu time
 
Agile Testing - entregando valor do início a fim
Agile Testing - entregando valor do início a fimAgile Testing - entregando valor do início a fim
Agile Testing - entregando valor do início a fim
 
[MTC 2021] Vieses da qualidade - Daniele Vieira Fiorot
[MTC 2021] Vieses da qualidade -  Daniele Vieira Fiorot[MTC 2021] Vieses da qualidade -  Daniele Vieira Fiorot
[MTC 2021] Vieses da qualidade - Daniele Vieira Fiorot
 
Testes em todos os niveis de planejamento
Testes em todos os niveis de planejamentoTestes em todos os niveis de planejamento
Testes em todos os niveis de planejamento
 
Teste automatizados e tdd
Teste automatizados e tddTeste automatizados e tdd
Teste automatizados e tdd
 
Testes de software
Testes de softwareTestes de software
Testes de software
 

Semelhante a TDD, mocks e mais: introdução à testes automatizados

Testando Aplicações Django: Quando, Como e Onde?
Testando Aplicações Django: Quando, Como e Onde?Testando Aplicações Django: Quando, Como e Onde?
Testando Aplicações Django: Quando, Como e Onde?Bernardo Fontes
 
Desenvolvimento Dirigido por Testes
Desenvolvimento Dirigido por TestesDesenvolvimento Dirigido por Testes
Desenvolvimento Dirigido por TestesCamilo Ribeiro
 
TDD - Workshop Pyladies SP
TDD - Workshop Pyladies SPTDD - Workshop Pyladies SP
TDD - Workshop Pyladies SPJessyka Lage
 
Qualidade no desenvolvimento de Software com TDD e PHPUnit
Qualidade no desenvolvimento de Software com TDD e PHPUnitQualidade no desenvolvimento de Software com TDD e PHPUnit
Qualidade no desenvolvimento de Software com TDD e PHPUnitDomingos Teruel
 
Sobre TDD - Tech Friday da Everis Uberlândia
Sobre TDD - Tech Friday da Everis UberlândiaSobre TDD - Tech Friday da Everis Uberlândia
Sobre TDD - Tech Friday da Everis UberlândiaRogerio Fontes
 
Desenvolvimento orientado a testes
Desenvolvimento orientado a testesDesenvolvimento orientado a testes
Desenvolvimento orientado a testesCarlos Santana
 
Padrões para Desenvolvimento de Software Guiado por Testes
Padrões para Desenvolvimento de Software Guiado por TestesPadrões para Desenvolvimento de Software Guiado por Testes
Padrões para Desenvolvimento de Software Guiado por TestesEverton Rodrigues
 
Teste sua aplicação antes que ela teste você
Teste sua aplicação antes que ela teste vocêTeste sua aplicação antes que ela teste você
Teste sua aplicação antes que ela teste vocêTiago Link
 
Seja um júnior não seja um sobrinho
Seja um júnior não seja um sobrinhoSeja um júnior não seja um sobrinho
Seja um júnior não seja um sobrinhoAlexandre Andrade
 
O que seus testes garantem, o funcionamento do código ou das funcionalidades ...
O que seus testes garantem, o funcionamento do código ou das funcionalidades ...O que seus testes garantem, o funcionamento do código ou das funcionalidades ...
O que seus testes garantem, o funcionamento do código ou das funcionalidades ...Isaac de Souza
 
1 2 3 - Testando - Automatizando os testes de software
1 2 3 - Testando - Automatizando os testes de software1 2 3 - Testando - Automatizando os testes de software
1 2 3 - Testando - Automatizando os testes de softwareHeider Lopes
 
Importância de Testes Automatizados para Continuous Delivery & DevOps
Importância de Testes Automatizados para Continuous Delivery & DevOpsImportância de Testes Automatizados para Continuous Delivery & DevOps
Importância de Testes Automatizados para Continuous Delivery & DevOpsSamanta Cicilia
 
Verdades e mitos sobre testes que eu gostaria
Verdades e mitos sobre testes que eu gostariaVerdades e mitos sobre testes que eu gostaria
Verdades e mitos sobre testes que eu gostariaLivia Gabos
 
Descomplicando os mocks
Descomplicando os mocksDescomplicando os mocks
Descomplicando os mocksDouglas Bastos
 
Programação Pragmática
Programação PragmáticaProgramação Pragmática
Programação Pragmáticaelliando dias
 

Semelhante a TDD, mocks e mais: introdução à testes automatizados (20)

Testando Aplicações Django: Quando, Como e Onde?
Testando Aplicações Django: Quando, Como e Onde?Testando Aplicações Django: Quando, Como e Onde?
Testando Aplicações Django: Quando, Como e Onde?
 
Desenvolvimento Dirigido por Testes
Desenvolvimento Dirigido por TestesDesenvolvimento Dirigido por Testes
Desenvolvimento Dirigido por Testes
 
TDD - Workshop Pyladies SP
TDD - Workshop Pyladies SPTDD - Workshop Pyladies SP
TDD - Workshop Pyladies SP
 
Qualidade no desenvolvimento de Software com TDD e PHPUnit
Qualidade no desenvolvimento de Software com TDD e PHPUnitQualidade no desenvolvimento de Software com TDD e PHPUnit
Qualidade no desenvolvimento de Software com TDD e PHPUnit
 
Sobre TDD - Tech Friday da Everis Uberlândia
Sobre TDD - Tech Friday da Everis UberlândiaSobre TDD - Tech Friday da Everis Uberlândia
Sobre TDD - Tech Friday da Everis Uberlândia
 
Desenvolvimento orientado a testes
Desenvolvimento orientado a testesDesenvolvimento orientado a testes
Desenvolvimento orientado a testes
 
Clean code
Clean codeClean code
Clean code
 
Padrões para Desenvolvimento de Software Guiado por Testes
Padrões para Desenvolvimento de Software Guiado por TestesPadrões para Desenvolvimento de Software Guiado por Testes
Padrões para Desenvolvimento de Software Guiado por Testes
 
Teste sua aplicação antes que ela teste você
Teste sua aplicação antes que ela teste vocêTeste sua aplicação antes que ela teste você
Teste sua aplicação antes que ela teste você
 
Seja um júnior não seja um sobrinho
Seja um júnior não seja um sobrinhoSeja um júnior não seja um sobrinho
Seja um júnior não seja um sobrinho
 
O que seus testes garantem, o funcionamento do código ou das funcionalidades ...
O que seus testes garantem, o funcionamento do código ou das funcionalidades ...O que seus testes garantem, o funcionamento do código ou das funcionalidades ...
O que seus testes garantem, o funcionamento do código ou das funcionalidades ...
 
1 2 3 - Testando - Automatizando os testes de software
1 2 3 - Testando - Automatizando os testes de software1 2 3 - Testando - Automatizando os testes de software
1 2 3 - Testando - Automatizando os testes de software
 
Cultura de testes
Cultura de testesCultura de testes
Cultura de testes
 
Testes de unidade - Conhecendo e aplicando
Testes de unidade - Conhecendo e aplicandoTestes de unidade - Conhecendo e aplicando
Testes de unidade - Conhecendo e aplicando
 
Importância de Testes Automatizados para Continuous Delivery & DevOps
Importância de Testes Automatizados para Continuous Delivery & DevOpsImportância de Testes Automatizados para Continuous Delivery & DevOps
Importância de Testes Automatizados para Continuous Delivery & DevOps
 
Verdades e mitos sobre testes que eu gostaria
Verdades e mitos sobre testes que eu gostariaVerdades e mitos sobre testes que eu gostaria
Verdades e mitos sobre testes que eu gostaria
 
Descomplicando os mocks
Descomplicando os mocksDescomplicando os mocks
Descomplicando os mocks
 
Introdução ao XP
Introdução ao XPIntrodução ao XP
Introdução ao XP
 
Programação Pragmática
Programação PragmáticaProgramação Pragmática
Programação Pragmática
 
Palestra TDD Javou! #08 2016
Palestra TDD Javou! #08 2016Palestra TDD Javou! #08 2016
Palestra TDD Javou! #08 2016
 

Mais de Ana Paula Gomes

Flask e a sua primeira app web com python!
Flask e a sua primeira app web com python!Flask e a sua primeira app web com python!
Flask e a sua primeira app web com python!Ana Paula Gomes
 
House of data - TDC Floripa
House of data - TDC FloripaHouse of data - TDC Floripa
House of data - TDC FloripaAna Paula Gomes
 
Hackeando a sua comunidade
Hackeando a sua comunidadeHackeando a sua comunidade
Hackeando a sua comunidadeAna Paula Gomes
 
House of data - ciência de dados para desenvolvedores
House of data - ciência de dados para desenvolvedoresHouse of data - ciência de dados para desenvolvedores
House of data - ciência de dados para desenvolvedoresAna Paula Gomes
 
TDC 2015 - Análise de Redes sociais com Python
TDC 2015 - Análise de Redes sociais com PythonTDC 2015 - Análise de Redes sociais com Python
TDC 2015 - Análise de Redes sociais com PythonAna Paula Gomes
 
Shut up and give me the data
Shut up and give me the dataShut up and give me the data
Shut up and give me the dataAna Paula Gomes
 
Codelab - Análise de Redes Sociais com Python
Codelab - Análise de Redes Sociais com PythonCodelab - Análise de Redes Sociais com Python
Codelab - Análise de Redes Sociais com PythonAna Paula Gomes
 
Apresentação do artigo "Experimental evidence of massive-scale emotional cont...
Apresentação do artigo "Experimental evidence of massive-scale emotional cont...Apresentação do artigo "Experimental evidence of massive-scale emotional cont...
Apresentação do artigo "Experimental evidence of massive-scale emotional cont...Ana Paula Gomes
 
Análise de Redes Sociais com Python
Análise de Redes Sociais com PythonAnálise de Redes Sociais com Python
Análise de Redes Sociais com PythonAna Paula Gomes
 

Mais de Ana Paula Gomes (10)

Developer anarchy
Developer anarchyDeveloper anarchy
Developer anarchy
 
Flask e a sua primeira app web com python!
Flask e a sua primeira app web com python!Flask e a sua primeira app web com python!
Flask e a sua primeira app web com python!
 
House of data - TDC Floripa
House of data - TDC FloripaHouse of data - TDC Floripa
House of data - TDC Floripa
 
Hackeando a sua comunidade
Hackeando a sua comunidadeHackeando a sua comunidade
Hackeando a sua comunidade
 
House of data - ciência de dados para desenvolvedores
House of data - ciência de dados para desenvolvedoresHouse of data - ciência de dados para desenvolvedores
House of data - ciência de dados para desenvolvedores
 
TDC 2015 - Análise de Redes sociais com Python
TDC 2015 - Análise de Redes sociais com PythonTDC 2015 - Análise de Redes sociais com Python
TDC 2015 - Análise de Redes sociais com Python
 
Shut up and give me the data
Shut up and give me the dataShut up and give me the data
Shut up and give me the data
 
Codelab - Análise de Redes Sociais com Python
Codelab - Análise de Redes Sociais com PythonCodelab - Análise de Redes Sociais com Python
Codelab - Análise de Redes Sociais com Python
 
Apresentação do artigo "Experimental evidence of massive-scale emotional cont...
Apresentação do artigo "Experimental evidence of massive-scale emotional cont...Apresentação do artigo "Experimental evidence of massive-scale emotional cont...
Apresentação do artigo "Experimental evidence of massive-scale emotional cont...
 
Análise de Redes Sociais com Python
Análise de Redes Sociais com PythonAnálise de Redes Sociais com Python
Análise de Redes Sociais com Python
 

TDD, mocks e mais: introdução à testes automatizados

  • 1. In Tests We Trust: começando com TDD, mocks e mais @anapaulagomess
  • 2. Ana Paula Gomes oi! Software Engineer @LoadSmart Code Reviewer @Udacity Msc Computer Science @UFMG Organizer @PyData Perna de pau @Boas Esportes
  • 3. “Se você não faz testes, seu código não é profissional.” Ex-colega de trabalho para um candidato
  • 4. Mas que raios é TDD?
  • 6. Test-Driven Development ● Escreva um teste (unitário) para a funcionalidade que você deseja ○ O teste irá falhar, afinal a funcionalidade ainda não existe! ● Escreva o código da funcionalidade até que o teste passe ○ Utilize baby steps! ● Refatore o código ○ A ideia é deixá-lo bem estruturado!
  • 7. Estranho ou não? ● Começar exige um certo esforço ● A prática leva a naturalidade ● Se você achou difícil, está tudo bem
  • 8. Mas porquê é importante? ● Te ajuda a moldar o design da aplicação ● Dá mais confiabilidade e qualidade a aplicação ● Torna melhor a manutenção do código (para refatorar ou corrigir bugs)
  • 9. talk is cheap - show me the code
  • 10. dojo Você deve desenvolver um identificador de gênero, dado um nome próprio (utilizando uma API)um problema real para começar
  • 11. Por onde você começaria?
  • 12. Talvez fazendo logo uma requisição? requests.get('https://api.genderize.io/?name=ana')
  • 13. Baby Steps Qual o menor teste possível?
  • 14. O menor teste possível Dado um nome, retorna o gênero. entrada: Ana saída: female
  • 15. O menor teste possível Dado um nome, retorna o gênero. Utilizando pytests!
  • 16. O menor teste possível Dado um nome, retorna o gênero. Utilizando pytests! AAA: Arrange, Act & Assert
  • 17. O menor teste possível Dado um nome, retorna o gênero. Utilizando pytests!
  • 18. Importante! ● AAA ○ Arrange: prepare tudo o que você precisa para executar o seu teste ○ Act: execute o trecho de código a ser testado ○ Assert: verifique o resultado! ● Os testes devem estar em uma pasta separada ○ Por convenção, o nome da pasta é chamada de tests ● Os arquivos de testes devem começar com o prefixo test_nome_do_modulo_testado.py ○ As bibliotecas de teste buscam pelo prefixo test_ ● Os nomes dos testes importam e precisam ser expressivos! ○ Os testes devem ser a documentação viva do código
  • 20. Fizemos o teste falhar. Vamos fazê-lo passar! Implementamos apenas a funcionalidade necessária para fazer o teste passar!
  • 22. Situações que poderiam existir no “detector” ● Retornar “female” quando o nome for feminino ● Retornar “male” quando o nome for masculino ● Buscar apenas pelo primeiro nome ● Lançar uma exceção quando o nome for “” ou None ● Retornar “unidentified” quando o nome não tiver o gênero identificável
  • 23. Continuando o menor teste possível Dessa vez, dado um nome masculino, retorna o gênero “male”. Utilizando pytests!
  • 25. Fizemos o teste falhar. Vamos fazê-lo passar!
  • 27. Quais as desvantagens da nossa abordagem atual? ● Tempo de execução ● Os testes não são offline ● Não atende as limitações do negócio ○ Muitas APIs, assim como essa, tem número de requests limitadas
  • 30. Algumas regras de ouro sobre Mocks ● Mock o que você não pode testar ● Mock dependências externas ● Evite mockar as suas classes ○ Mockistas x Classistas
  • 31. talk is cheap - show me the code
  • 32. O que podemos mockar? requests.get('https://api.genderize.io/?name=ana')
  • 33. Mockando a nossa requisição Não esquecer do import mock
  • 34. Mockando a nossa requisição Arrange Act Assert
  • 36. Como ficou o código! https://github.com/anapaulagomes/in-tests-we-trust
  • 37. Turbinando os seus testes! Algumas bibliotecas para ajudar nos testes
  • 38. Bibliotecas para ajudar nos testes ● Pytest ○ fixtures ○ coverage ● Faker ● vcrpy ● freezegun ● Tox + Pyenv + Virtualenv Referências: blog.paulagrangeiro.com.br/5-libs-essenciais-para-testes-unit%C3%A1rios-python-f2ba8326e76a klauslaube.com.br/2016/04/26/o-simples-e-poderoso-pyenv.html
  • 40. Pra lembrar! ● A maior vantagem do TDD é deixar surgir o design do software ○ Buscando melhor manutenção e objetividade ● Qualidade do código / manutenibilidade ○ A garantia após fazer uma alteração: não tem preço ● Começar pode ser difícil - e está tudo bem - pratique!
  • 41. Para Casa ● Test Driven Development: By Example ● Growing Object-Oriented Software, Guided by Tests ● Dar uma olhada: ○ Continuous Integration ○ Continuous Delivery ○ Cobertura de testes ● Código da palestra completo em: github.com/anapaulagomes/in-tests-we-trust
  • 42. valeu =) deixe o seu feedback após o sinal: @anapaulagomess