● Consigo ir mais longe ● Reduz a quantidade de adivinhação ● Por conseguinte, reduz minha ansiedade :) PORÉM: não ajuda se falta feedback para coisas mais amplas (tipo: estou criando o produto certo?) Por que é legal escrever testes?
Cheap trick $ ./meu_script.py out.txt $ diff <(./meu_script.py Prós: 1. de graça! 2. se sentir Unıx hacker :D Contras: 1. cobre apenas o caminho feliz 2. não aponta o problema exato
Estrutura de um teste ➔ Dado: ◆ fixtures, inicializando código a ser testado ➔ Quando: ◆ exercitar código a ser testado ➔ Então: ◆ verifica se resultado é o esperado
Estrutura de um teste ➔ Dado: ◆ fixtures, inicializando código a ser testado ➔ Quando: ◆ exercitar código a ser testado ➔ Então: ◆ verifica se resultado é o esperado Parte mais chata
Estrutura de um teste ➔ Dado: ◆ fixtures, inicializando código a ser testado ➔ Quando: ◆ exercitar código a ser testado ➔ Então: ◆ verifica se resultado é o esperado Parte mais importante e mais fácil de errar
Fazendo o teste falhar def test_device_should_be_connected(self): # when: report = get_status_report(self.offline_device) # then: self.assertTrue('connected' in report) OOOPS! Teste continua passando!
Tipos de dublês de teste ➔ Dummy ◆ só para preencher argumentos (geralmente vazios, tipo None, [], {}, etc) ➔ Fakes ◆ implementação leve duma dependência (exemplo: DB em memória) ➔ Stubs ◆ simulam respostas prontas para chamadas feitas pelo código sendo testado ➔ Mocks ◆ especificam contrato com código sendo testado (possuem asserções)
Últimos pensamentos... ● Testar a coisa certa, na camada correta, às vezes é difícil de descobrir. Idéia: pensar o que é mais provável mudar. ● “Bom design recebe bem as mudanças” - José Ricardo ○ Isto vale para o código dos testes também, mas os tipos de coisas que causam mudanças são diferentes. ○ Geralmente, código de teste é melhor bem direto (mínima indireção, sem muita herança e/ou OO)
FIM Thanks! Algumas referências: ● http://blog.solidcraft. eu/2012/09/test-driven-traps- part-1.html ● http://martinfowler. com/articles/mocksArentStubs. html ● https://www.destroyallsoftware. com/screencasts/catalog ● https://www.facebook. com/notes/kent-beck/when-tdd- doesnt- matter/797644973601702 ● Livro do Michael Feathers Elias Dorneles @eliasdorneles