in tests we trust: começando com tdd, mocks e mais

Post on 16-Mar-2018

301 Views

Category:

Software

2 Downloads

Preview:

Click to see full reader

TRANSCRIPT

In Tests We Trust:

começando com TDD, mocks e mais

@anapaulagomess

Ana Paula Gomesoi!

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ívelDado um nome, retorna o gênero.

entrada: Ana

saída: female

O menor teste possívelDado um nome, retorna o gênero.

Utilizando pytests!

O menor teste possívelDado um nome, retorna o gênero.

Utilizando pytests!

AAA: Arrange, Act & Assert

O menor teste possívelDado 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ívelDessa 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çãoNão esquecer

do import mock

Mockando a nossa requisiçãoArrange

ActAssert

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-f2ba8326e76aklauslaube.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

top related