Slide 1

Slide 1 text

Test-Driven Development Breno Ferreira @breno_ferreira http://github.com/brenoferreira

Slide 2

Slide 2 text

Você escreve testes?

Slide 3

Slide 3 text

Big Design Up-Front (BDUF)

Slide 4

Slide 4 text

Alto acoplamento

Slide 5

Slide 5 text

Comentários

Slide 6

Slide 6 text

Documentação

Slide 7

Slide 7 text

Código que precisa de explicação

Slide 8

Slide 8 text

Isso gera Bugs!

Slide 9

Slide 9 text

Isso gera #MEDO

Slide 10

Slide 10 text

Falta de motivação

Slide 11

Slide 11 text

Tem como ser produtivo assim?

Slide 12

Slide 12 text

Quem disse que construir software é fácil?

Slide 13

Slide 13 text

Por que testar?

Slide 14

Slide 14 text

Por que testar? Confiabilidade

Slide 15

Slide 15 text

Por que não testar?

Slide 16

Slide 16 text

Eu sou Jedi! Eu sou Sênior

Slide 17

Slide 17 text

Não temos tempo!

Slide 18

Slide 18 text

Acredite! Você NÃO é tão bom assim!

Slide 19

Slide 19 text

Mito Escrever testes demora muito, eu poderia ter implementado direto

Slide 20

Slide 20 text

Verdade Não escrever testes dá uma falta sensação de velocidade

Slide 21

Slide 21 text

No content

Slide 22

Slide 22 text

No content

Slide 23

Slide 23 text

Testar é necessário Não escrever testes é como um cirurgião que não lava as mãos antes de uma operação | Robert “Uncle Bob” Martin

Slide 24

Slide 24 text

Testar é necessário Não escrever testes é anti-ético | Alguém no twitter

Slide 25

Slide 25 text

Mas afina, o que são testes? • Código que executa outro código • Verifica a exatidão de pressupostos • Caso esses pressupostos estejam corretos, o teste passa, senão, falha

Slide 26

Slide 26 text

Vantagens • Prover feedback • Tendem a melhorar o design da aplicação • Contribui para manutenção • Documentação executável do seu código

Slide 27

Slide 27 text

Desvantagens

Slide 28

Slide 28 text

#Fatos • Se está dificil de testar, voce possivelmente está fazendo algo errado • Testes ruins são piores que nenhum teste • Saber o que testar, no começo, é dificil

Slide 29

Slide 29 text

Tipos de teste • Unidade • Integração • Aceitação • Carga

Slide 30

Slide 30 text

TDD Red Green Refactor

Slide 31

Slide 31 text

Show me the code!

Slide 32

Slide 32 text

Jasmine.JS http://pivotal.github.io/jasmine/

Slide 33

Slide 33 text

describe(‘Todos’, function(){ it(‘TodosView deve iniciar com lista vazia’, function(){ var view = new TodosView(); expect(view.todos.length).toBe(0); }); });

Slide 34

Slide 34 text

it('cria todo', function(){ var view = new TodosView(); view.criarTodo('nova todo'); expect(view.todos.length).toBe(1); });

Slide 35

Slide 35 text

it('cria todo com nome passado por param', function(){ var view = new TodosView(); var nomeTodo = 'nova todo'; view.criarTodo(nomeTodo); expect(view.todos[0].nome).toBe(nomeTodo); });

Slide 36

Slide 36 text

Jasmine-jQuery it('renderiza lista de todos', function(){ var listaTodos = ['tarefa1', 'tarefa2', 'tarefa3']; var view = new TodosView(tarefas); expect($('li:first')).toHaveText('tarefa1') });

Slide 37

Slide 37 text

Mocks & Stubs

Slide 38

Slide 38 text

it('salva todos', function(){ var collection = new TodosCollection( ['tarefa1', 'tarefa2', 'tarefa3']; ); spyOn(collection, 'save'); var view = new TodosView(collection); view.salvar(); expect($('#resultado')).toHaveText('Todos salvas'); });

Slide 39

Slide 39 text

it('salva todos chama metodo save', function(){ var collection = new TodosCollection( ['tarefa1', 'tarefa2', 'tarefa3']; ); spyOn(collection, 'save'); var view = new TodosView(collection); view.salvar(); expect(collection.save).toHaveBeenCalled(); });

Slide 40

Slide 40 text

Sinon.JS

Slide 41

Slide 41 text

it('carrega todos do servidor', function(){ var collection = new TodosCollection(); var view = new TodosView(collection); view.listar(); server.requests[0].respond( 200, { "Content-Type": "application/json" }, JSON.stringify(['tarefa1', 'tarefa2']); ); expect(view.todos[0].nome).toBe('tarefa1'); });

Slide 42

Slide 42 text

http://dnad.azurewebsites.net

Slide 43

Slide 43 text

Perguntas

Slide 44

Slide 44 text

Obrigado • @breno_ferreira • [email protected] • Aproveitem o evento • Inscrevam-se no DNAD