SlideShare uma empresa Scribd logo
1 de 57
Descomplicando os mocks
Python Brasil
07 de outubro de 2017
Belo Horizonte-MG
Douglas Bastos
Desenvolvedor
https://douglasbastos.github.io
douglasbastosok
douglasbastos
douglasbastos
Agenda
● Testes manuais
● Testes manuais vs Testes automatizados
● Teste Unitário
● Mock
● Exemplos práticos utilizando mock
● Bibliotecas complementares ao mock
Por que falar sobre testes e mocks?
Por que testamos?
● Garantir que o sistema faça o que deveria fazer.
Testes manuais
● Testar o sistema inteiro é trabalhoso.
● Retrabalho
● Existem testes que são humanamente impossíveis realizá-los
Ex: Teste de carga
Testes automatizados
● Evita trabalho repetitivo
● Conseguimos testar um sistema completo em
segundos.
Então temos que parar de fazer testes
manuais?
Mas cada caso é um caso
Sempre utilize os dois com inteligência
então...
Testes unitários
● É um nível de teste de software no qual componentes
individuais são testados. (Métodos e funções)
● O propósito é validar se cada unidade do software executa
como esperado
O que é?
Testes unitários
● Garantir que problemas sejam descobertos cedo
● Facilitar manutenção de código
● Servir como documentação
● Ajudam a melhorar o design do seu código
Benefícios
Testes unitários
● Demora
● Sei do que estou fazendo
● Estamos sem tempo
Desculpas...
“Desenvolvedor que não faz testes, é
como cirurgião que não lava as mãos!”
– Robert C. Martin
Então, vamos ver código?
Função somar
Teste unitário
Remover lista de arquivos
Problemas
● Tenho que criar arquivos de verdade no projeto
● Teste falhando antes da hora, arquivo criado permanecerá
● Posso acabar apagando um arquivo necessário.
Mock
O que o mock faz?
● Simula comportamento de objetos
● Isola dependências externas
● Possibilita asserções
Mock
Nativo no python 3
from unittest import mock
Instalável no python 2
pip install mock
import mock
Remover lista de arquivos
Testando remoção de arquivos
Mas como?
Quantidade de vezes que o objeto
mockado foi executado
Sintaxes
Utilizando gerenciador de
contexto
Sintaxes Decorando o método de
teste
Sintaxes Decorando a classe de
teste
Sintaxes
Utilizando o setUp
Enviar conteúdo para aws/s3
Problemas
● Necessidade de acesso à internet
● Configuração válida com aws
● Todos testes enviaram arquivos de verdade para aws
Testando o envio de conteúdo para aws
Mas não estávamos usando mock.path.object?
patch vs patch.object
mock.patch.object(os, remove)
mock.patch('example.cenario2.os.remove')
Necessita importar antes do realizar o mock
Não necessita importar antes de realizar o mock
Objeto mockado retornando valor
Nosso alvo
Objeto mockado retornando valor
Valor positivo Valor negativo
Testar uma exceção
Nosso alvo
Utilizando side_effect
Asserções
assert_called
assert_called_once
assert_called_with
assert_called_once_with
assert_not_called
Outros objetos que ajudam na hora do teste
call_count
call_args
call_args_list
Saudar usuário dependendo da hora
Problema
● Lógica é feita pela hora atual
pip install freezegun
Como utilizar freezun
Mais sobre o freezegun
https://github.com/spulec/freezegun
Realizar requisição para apis
Problemas
● Necessidade de acesso à internet
● Request de verdade
● Usuário do testes deixar de existir, teste quebra
● Informações do usuário alterada, teste quebra
pip install responses
Utilizando o responses
Utilizando o responses
Mais sobre o responses
https://github.com/getsentry/responses
Usem mock
Mas com moderação
Documentação mock
https://docs.python.org/3/library/unittest.mock.html
Slide
http://bit.ly/slide_mock_pybr
Código
http://bit.ly/github_mock
Dúvidas?
Dissemine conhecimento!
Obrigado!
douglasbastosok
douglasbastos
douglasbastos

Mais conteúdo relacionado

Mais procurados (7)

Testes, deploy e integração continua com Python e Django
Testes, deploy e integração continua com Python e DjangoTestes, deploy e integração continua com Python e Django
Testes, deploy e integração continua com Python e Django
 
Coding Dojo e Test Driven Development
Coding Dojo e Test Driven DevelopmentCoding Dojo e Test Driven Development
Coding Dojo e Test Driven Development
 
TDD com Python
TDD com PythonTDD com Python
TDD com Python
 
TDCPOA2018 - Trilha Python - Testes de Performance com Locust
TDCPOA2018 - Trilha Python - Testes de Performance com LocustTDCPOA2018 - Trilha Python - Testes de Performance com Locust
TDCPOA2018 - Trilha Python - Testes de Performance com Locust
 
Mutant Testing: um mundo para um X-Tester participar.
Mutant Testing: um mundo para um X-Tester participar.Mutant Testing: um mundo para um X-Tester participar.
Mutant Testing: um mundo para um X-Tester participar.
 
Vamos falar sobre testes no moip
Vamos falar sobre testes no moipVamos falar sobre testes no moip
Vamos falar sobre testes no moip
 
Automatizando seus testes com robot framework
Automatizando seus testes com robot frameworkAutomatizando seus testes com robot framework
Automatizando seus testes com robot framework
 

Semelhante a Descomplicando os mocks

Mock it with mockito
Mock it with mockitoMock it with mockito
Mock it with mockito
Renan Uchôa
 
Django Object factory
Django Object factoryDjango Object factory
Django Object factory
italomaia
 
Desenvolvimento web com python e django
Desenvolvimento web com python e djangoDesenvolvimento web com python e django
Desenvolvimento web com python e django
Igor Sobreira
 
Introdução a testes automatizados
Introdução a testes automatizadosIntrodução a testes automatizados
Introdução a testes automatizados
Thiago Ghisi
 

Semelhante a Descomplicando os mocks (20)

Testes de Unidade com Junit
Testes de Unidade com JunitTestes de Unidade com Junit
Testes de Unidade com Junit
 
Mock it with mockito
Mock it with mockitoMock it with mockito
Mock it with mockito
 
Testes de Unidade - Unidade II
Testes de Unidade - Unidade IITestes de Unidade - Unidade II
Testes de Unidade - Unidade II
 
Teste de Integração - Unidade III
Teste de Integração - Unidade IIITeste de Integração - Unidade III
Teste de Integração - Unidade III
 
JUnit Experience
JUnit ExperienceJUnit Experience
JUnit Experience
 
Django Object factory
Django Object factoryDjango Object factory
Django Object factory
 
Testes de unidade - RP Tec Com
Testes de unidade - RP Tec ComTestes de unidade - RP Tec Com
Testes de unidade - RP Tec Com
 
6. apresentacao rp tec com 2018 igor rozani e felipe muniz
6. apresentacao rp tec com 2018 igor rozani e felipe muniz6. apresentacao rp tec com 2018 igor rozani e felipe muniz
6. apresentacao rp tec com 2018 igor rozani e felipe muniz
 
In tests we trust: começando com TDD, mocks e mais
In tests we trust: começando com TDD, mocks e maisIn tests we trust: começando com TDD, mocks e mais
In tests we trust: começando com TDD, mocks e mais
 
Desenvolvimento Dirigido por Testes
Desenvolvimento Dirigido por TestesDesenvolvimento Dirigido por Testes
Desenvolvimento Dirigido por Testes
 
Testes de Sofware
Testes de SofwareTestes de Sofware
Testes de Sofware
 
Testes E2E em Cypress com JS
Testes E2E em Cypress com JSTestes E2E em Cypress com JS
Testes E2E em Cypress com JS
 
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
 
Como testar sua aplicação Android com Robotium
Como testar sua aplicação Android com RobotiumComo testar sua aplicação Android com Robotium
Como testar sua aplicação Android com Robotium
 
Desenvolvimento web com python e django
Desenvolvimento web com python e djangoDesenvolvimento web com python e django
Desenvolvimento web com python e django
 
TDD Primeiro Contato
TDD Primeiro ContatoTDD Primeiro Contato
TDD Primeiro Contato
 
TDD (Resumo)
TDD (Resumo)TDD (Resumo)
TDD (Resumo)
 
Mock objects - Teste de código com dependências
Mock objects - Teste de código com dependênciasMock objects - Teste de código com dependências
Mock objects - Teste de código com dependências
 
Desenvolvimento orientado a testes
Desenvolvimento orientado a testesDesenvolvimento orientado a testes
Desenvolvimento orientado a testes
 
Introdução a testes automatizados
Introdução a testes automatizadosIntrodução a testes automatizados
Introdução a testes automatizados
 

Descomplicando os mocks

Notas do Editor

  1. Se eu tenho no meu menu a opção de mudar o background do meu site para azul, e eu clico nesse opção e ele muda para vermelho e então não realiza ação nenhuma, eu tenho um bug em produção.