TDD e BDD na prática Construa aplicações Ruby usando RSpec e Cucumber
Hugo Baraúna, Philippe HardardtConteúdo
Saber fazer testes automatizados é uma habilidade essencial para todo mundo que desenvolve software atualmente. Como devo escrever testes que ajudem a garantir o funcionamento do meu código? Organizar seus testes e saber aplicar TDD (Test-Driven Development) e BDD (Behavior-Driven Development) devidamente é um conhecimento que você pode usar em várias linguagens de programação. Para Ruby, dentre as ferramentas mais famosas para fazer isso estão o RSpec e o Cucumber.
Neste livro, Hugo Baraúna e Philippe Hardardt apresentam desde os fundamentos para escrever um teste que vá ajudar você a garantir a qualidade do seu software, até tópicos mais avançados, tais como: usar testes automatizados para ajudar no design do seu código, com TDD e BDD; a diferença entre mocks e stubs, quando usar um ou outro; como criar uma documentação executável do seu software e como isso pode ser útil.
Sumário
- 1 Visão geral sobre TDD
- 1.1 TDD e sua história
- 1.2 E por qual motivo eu deveria usar TDD?
- 2 Primeiros passos com RSpec e Cucumber
- 2.1 Olá RSpec
- 2.2 Olá Cucumber
- 2.3 O que é BDD?
- 3 Conhecendo o RSpec
- 3.1 Aprendendo a estrutura básica de um teste com RSpec
- 3.2 Por que existem tantos matchers no RSpec
- 3.3 Conhecendo os RSpec built-in matchers
- 3.4 Custom matchers
- 3.5 Entendendo o protocolo interno de matcher do RSpec
- 4 Organização, refatoração e reúso de testes com o RSpec
- 4.1 Reduzindo duplicação com hooks do RSpec
- 4.2 DRY versus clareza nos testes
- 4.3 After hook
- 4.4 Around hook
- 4.5 Organizando seus testes
- 4.6 Reúso de testes
- 5 Mocks e stubs
- 5.1 Por que preciso de mocks?
- 5.2 Conhecendo o conceito de test doubles
- 5.3 Usando stubs com RSpec
- 5.4 Escrevendo mock expectations com RSpec
- 5.5 Quando usar mock e quando usar stub
- 5.6 Usando o método double para fazer testes isolados
- 5.7 Verified doubles
- 6 Conhecendo o Cucumber
- 6.1 Por que usar Cucumber?
- 6.2 Visão geral de Cucumber
- 7 Especificando funcionalidades com Cucumber
- 7.1 Instalando e fazendo setup do Cucumber
- 7.2 Estrutura de uma feature com Cucumber
- 7.3 Escrevendo um cenário
- 7.4 Escrevendo cenários expressivos com Cucumber
- 8 Automatizando especificações com Cucumber
- 8.1 Escrevendo os primeir os step definitions
- 8.2 Escrevendo step definitions para cenários expressivos
- 8.3 Support code
- 8.4 Cucumber World
- 8.5 Usando Cucumber hooks
- 9 Boas práticas no uso de Cucumber
- 9.1 Use e abuse das descrições da funcionalidade e dos cenários
- 9.2 Evite detalhes desnecessários
- 9.3 Cenários imperativos versus cenários declarativos
- 9.4 Organizando os arquivos da minha especificação executável
- 10 BDD na prática: começando um projeto com BDD
- 10.1 Definindo o escopo da nossa aplicação: Jogo da Forca
- 10.2 Especificando uma funcionalidade com Cucumber
- 10.3 Usando RSpec no nosso primeiro teste
- 10.4 Usando Aruba para testar uma aplicação CLI
- 10.5 Reutilizando step definitions de um modo melhor
- 11 Começando o segundo cenário
- 11.1 Definindo o segundo cenário
- 11.2 Reduza duplicação através de support code
- 11.3 Implementando o fluxo do jogo no binário
- 11.4 Modificando nosso cenário para receber o feedback correto
- 11.5 Usando subject e let do RSpec para evitar duplicação nos testes
- 11.6 Refatorando o código para poder implementar o segundo cenário
- 11.7 Extraindo uma classe através de refatoração
- 11.8 Possibilitando ao jogador terminar o jogo no meio
- 12 Finalizando a primeira funcionalidade
- 12.1 Deixando o segundo cenário no verde
- 12.2 Finalizando a primeira funcionalidade
- 13 Refatorando nosso código
- 13.1 Identificando os pontos a serem refatorados
- 13.2 Extraindo uma classe de um método privado
- 13.3 Distribuindo responsabilidades para outras classes
- 14 Especificando a segunda funcionalidade
- 14.1 Documentando especificação e critério de aceite com Cucumber
- 14.2 Definindo o teste de aceitação do primeiro cenário
- 14.3 Melhore a testabilidade do seu software
- 15 Finalizando 15 a segunda funcionalidade
- 15.1 Refatorando nosso jogo para ter uma máquina de estados
- 15.2 Refatorando o fluxo do jogo para usar a máquina de estados
- 15.3 Organizando seus testes otimizando para leitura
- 15.4 Interface discovery utilizando test doubles
- 15.5 Finalizando a funcionalidade Adivinhar letra
- 16 Finalizando nosso jogo
- 16.1 Especificando o fim do jogo
- 16.2 Jogador vence o jogo
- 16.3 Jogador perde o jogo
- 16.4 Próximos passos
- 17 Referências bibliográficas
Autores
Hugo Baraúna
Hugo Baraúna fundou a Plataformatec, empresa de consultoria de software especializada em Ruby, agile e Elixir. A Plataformatec foi a empresa que criou a linguagem Elixir. Também foi uma referência nacional e internacional no mundo Ruby, devido principalmente a seus projetos open source, como Devise e Simple Form. Hugo se formou em Engenharia de Computação pela Politécnica da USP e tem um MBA pelo Insper. Atualmente, ele mora em São Paulo com sua esposa e seus dois gatinhos.
Philippe Hardardt
Philippe Hardardt trabalha com desenvolvimento de software desde 2008 e já experimentou muitas linguagens de programação diferentes, desde ASP até Clojure. Tem um interesse especial por tópicos que se aplicam a qualquer tecnologia, como testes automatizados. Teve a oportunidade de trabalhar na Plataformatec até sua aquisição pelo Nubank, onde trabalha atualmente.
Dados do produto
- Número de páginas:
- 429
- ISBN:
- 978-65-86110-29-6
- Data publicação:
- 08/2020