Spock framework Testes automatizados ágeis para Java e REST
José YoshiriroSobre o livro
Público-alvo
Esta obra destina-se a estudantes e profissionais de desenvolvimento de software, principalmente para a plataforma Java. Esta obra destina-se a estudantes e profissionais de desenvolvimento de software, principalmente para a plataforma Java. Profissionais que trabalham exclusivamente criando testes também são público para este livro, pois o Spock também permite criar testes para REST APIs.
Para melhor acompanhar o conteúdo desta obra, são necessárias noções intermediárias de programação com a plataforma Java, tais como: configuração do ambiente, orientação a objetos, coleções e tratamento de exceções.
Esta obra contém capítulos sobre testes para REST APIs, Spring Boot e Spring MVC. Esses capítulos são destinados a profissionais com o mínimo de conhecimento sobre essas tecnologias.
Conceitos básicos sobre testes de software não são necessários, pois são revisados em vários tópicos do livro.
Caso você, leitor ou leitora, tenha pouco ou nenhum conhecimento sobre a linguagem Groovy, pode recorrer ao Apêndice A - Guia de Groovy para desenvolvedores Java.
A versão do Spock abordada neste livro foi a 2.3-groovy-4.0, lançada em 29 de setembro de 2022, sendo a mais recente versão estável no momento da escrita deste livro.
Sobre o autor
José Yoshiriro Ajisaka Ramos, mais conhecido como Yoshi, nasceu em julho de 1981 em Belém-PA. É bacharel em Sistemas de Informação e especialista em Engenharia de Sistemas. Possui certificações internacionais PMI (ACP), OMG (OCUP Fundamental) e ORACLE (SCBCD 5, SCWCD 5, SCJP 6 e SOA Suite 11g Certified Implementation Specialist).
Atua profissionalmente com desenvolvimento de software desde 2002, mas programa desde 1994. Atuou na criação e/ou manutenção de sistemas usados em organizações como TJE-PA, BrasilPrev, Rico, Caixa Econômica Federal, DETRAN-PA, BASA, Citibank, American Red Cross (EUA) e OneBlood (EUA). Também colaborou com os projetos open source Struts 2 e Grails. Programar é uma de suas grandes paixões.
É professor desde 2003, atuando como instrutor em vários cursos de programação. Como docente em nível superior, já trabalhou para UAB/IFPA, Faculdade Ipiranga e FIAP. No início de 2014, passou a compor o corpo docente da faculdade São Paulo Tech School - SPTech. Certamente já teve mais de mil alunos. Publicou vários artigos sobre programação nas revistas MundoJava e GroovyMag (EUA). É autor de outro livro, o Deixe seu código limpo e brilhante - Desmistificando Clean Code com Java e Python, também publicado pela Casa do Código. Palestrou em diversos eventos de tecnologia, como na Virada Tecnológica de São Paulo 2017, nos TDC São Paulo de 2014, 2015, 2017 e 2019, e no FISL de 2015. Ensinar é sua grande paixão
Prefácio
Por Prof. Dr. Eduardo Martins Guerra
Há cerca de 20 anos, começava um movimento no mundo da engenharia de software, que contestava a forma como as coisas estavam sendo feitas e propunha novos valores. Surgiam o que chamamos hoje de métodos ágeis!
Todos os princípios e técnicas do desenvolvimento ágil são baseados em uma premissa: o código existente deve ser fácil de ser modificado. Porém, isso não vem de graça! É necessária muita disciplina nas práticas utilizadas para que isso realmente seja uma realidade. Além de ser preciso cuidado constante para manter o código limpo e desacoplado, os testes automatizados também possuem um importante papel nessa questão.
A presença de testes automatizados é importante para dar segurança em qualquer modificação do código. Seja para refatorá-lo, buscando frequentemente mantê-lo desacoplado, simples e legível, seja para inserir novas funcionalidades, os testes permitem uma detecção mais rápida quando algum comportamento anterior é quebrado. São esses testes que ajudam a manter baixo o custo de mudança, o que é fundamental, por exemplo, para viabilizar iterações curtas e com entregas frequentes.
Porém, a princípio muita gente não se dá conta de que testar não é nada fácil! Principalmente quando estamos falando de testes automatizados. Um software interage com diversos recursos dentro de seu ecossistema e provê diferentes tipos de interface para a execução de suas funcionalidades. São questões técnicas como: mapeamento de classes para o banco de dados, acesso a serviços por REST APIs ou mesmo dependências de sistemas externos que precisam ser simulados.
Ter que lidar com essas questões nos testes faz muita gente travar! Para superar essas dificuldades, é importante conhecer uma ferramenta adequada juntamente com as técnicas de testes. É por isso que esse livro que você tem em mãos a respeito do Spock framework contém um conhecimento muito valioso! Além de ensinar a utilizar as funcionalidades desse framework, ele ainda apresenta as técnicas de teste, juntamente com exemplos didáticos e focados em problemas do mundo real para tecnologias que são padrão de mercado.
Conheci o Yoshi quando eu era editor-chefe da revista MundoJava, época em que ele sempre entrava em contato para propor artigos com temas atuais e extremamente relevantes para o mercado. Seus artigos eram sempre muito apreciados pela equipe técnica da revista e pelos nossos leitores devido à didática e à clareza com as quais apresentava os temas. Neste livro, ele acertou em cheio em uma temática na qual muita gente no mercado ainda precisa amadurecer. Tenho certeza de que a aplicação dos conceitos deste livro pode ser decisiva para o sucesso de muitos projetos!
Eduardo Martins Guerra é pesquisador do INPE. Foi professor no ITA, onde concluiu sua graduação, mestrado e doutorado. Suas pesquisas focam no design, arquitetura e teste de software. Foi editor-chefe da revista MundoJava por vários anos. É autor/co-autor de vários livros na área de computação.
Comentários sobre o livro
"Escrito de forma bem clara e didática, este livro não se restringe a apenas ensinar como utilizar o framework Spock, mas também apresenta de forma bem abrangente os principais conceitos relacionados a testes de software, bem como um comparativo entre as ferramentas de testes existentes no mercado. O uso do Spock é exemplificado em diversas plataformas e frameworks, incluindo Spring e REST APIs. Leitura imprescindível para todos os que prezam pela qualidade de seu software."
Célia Taniwaki. Professora na faculdade Bandtec. Mestra em Eng. Elétrica pela USP e Especialista em Eng. Elétrica pela Mei University do Japão. Foi analista/desenvolvedora na Itautec por 13 anos. Já traduziu vários livros e revistas de computação.
"Este livro do Yoshi é um ensaio tecnológico sobre testes de software. De forma equilibrada explora conceitos importantes sobre testes de softwares e de várias ferramentas de testes relevantes no mercado. Todo desenvolvedor deve conhecer este livro, pois é rico de exemplos e explica, detalhadamente, como configurar e aplicar as ferramentas nas principais IDEs e linguagens de programação da plataforma Java."
Daniel Couto Gatti. Diretor da Faculdade de Ciências Exatas e Tecnologia da PUC-SP e professor na faculdade Bandtec. Doutor em Educação Matemática e Mestre em Comunicação e Semiótica pela PUC-SP. É autor de vários livros na área de computação.
"Este livro que você tem em mãos a respeito do Spock framework contém um conhecimento muito valioso! Além de ensinar a utilizar as funcionalidades desse framework, ele ainda apresenta as técnicas de teste, juntamente com exemplos didáticos e focados em problemas do mundo real para tecnologias que são padrão de mercado. Neste livro, o Yoshi acertou em cheio em uma temática na qual muita gente no mercado ainda precisa amadurecer. Tenho certeza de que a aplicação dos conceitos deste livro pode ser decisiva para o sucesso de muitos projetos!"
Eduardo Martins Guerra. Pesquisador na Free University of Bolzen-Bolzano. Doutor e Mestre em Engenharia Eletrônica e Computação pelo ITA, onde também foi professor. Foi editor-chefe e articulista da revista MundoJava. É autor de vários livros na área de computação.
"Fazia muito tempo que esperava por um livro como este do Yoshiriro: é relevante, enriquece o leitor e vai além de um mero 'tutorial de Spock'. Aprendi coisas novas durante a sua leitura, coisas que vão além da documentação oficial. Se você quer entender como o Spock funciona - um framework que vejo muita gente aprender por aí dando murro em ponta de faca - creio que o livro é este. É bem fundamentado, bem escrito, didático e direto ao ponto. Você aprenderá não só como o Spock funciona, mas também algumas coisas a mais que valerão a pena no final. É o manual que faltava para o framework: que bom que foi escrito aqui no Brasil e em português para que torne essa poderosa ferramenta mais acessível."
Henrique Lobo Weissmann (Kico). Sócio-fundador da itexto, empresa de desenvolvimento de sistemas. Referência nacional em Spring e Groovy/Grails, sendo autor de livros sobre essas tecnologias e criador da comunidade Grails Brasil.
"Tive o privilégio de acompanhar parte do processo de formação do José Yoshiriro, como professor na graduação. Ele sempre foi muito entusiasmado com a tecnologia. Mas, além disso, tinha desde cedo muito forte o sentido da organização e da estruturação de ideias. Desta forma, é capaz de expressar conceitos Spring e complexos de maneira que as pessoas possam compreender facilmente. Ao ler este livro e conversar com o Yoshiriro, fico muito feliz em ver o quanto ele foi capaz de progredir ainda mais nestas habilidades com o passar do tempo. Destaco a forma como foram escolhidos e colocados para o(a) leitor(a) os diversos tipos de teste, que formam a linha de base das aplicações do livro. Com certeza, esta obra é uma leitura que, além de levar ao conhecimento técnico específico, é inspiradora no sentido de formas inovadoras de comunicação."
Manoel José dos Santos Sena. Diretor Executivo do Mundo Digital Interativo - MDI e professor na faculdade FACI Wyden. Mestre em Concepção Mecânica e doutor em Engenharia Mecânica pela Université Joseph Fourier - Grenoble I, UJF da França.
"O livro está muito bem escrito e gostei muito da forma como o conhecimento é construído: saindo do básico, ensinando como configurar o ambiente, até chegar a testes com RESTful APIs. Mesmo sem conhecer Groovy, fui capaz de entender o funcionamento dos testes. O Apêndice A está muito bom e foi o suficiente para um desenvolvedor .NET entender o básico de Groovy."
Paul Marques. Programador desde 2015. Atualmente, é desenvolvedor na Ouribank, onde trabalha com web services, sistemas web e desktop e automação de sistemas. É tecnólogo em Análise e Desenvolvimento de Sistemas pela faculdade SPTech.
"De maneira muito intuitiva, apresenta uma disciplina fundamental para todo desenvolvedor de software. Esclarece aos mais apressados e dá as ferramentas para quem quer mais profundidade. Foca nos benefícios de usar a ferramenta de acordo com o problema e torna praticamente transparente a apresentação do uso de uma linguagem de programação não tão comum no Brasil, mas de adoção extremamente simples em qualquer aplicação Java. Percebe o tamanho do desafio cumprido na proposta desse livro?! Fico muito contente em poder contar com esse nível de material em português e ver a didática do Yoshiriro agora materializada além dos limites da sala de aula e projetos em que contribui. E que venham os próximos!"
Victor Franzonatto. Engenheiro de software sênior no Mercado Livre. Trabalha com desenvolvimento de software desde 2006. Já liderou projetos em empresas como IBM, Porto Seguro e BrasilPrev. Já publicou e traduziu vários artigos sobre tecnologia.
Sumário
- 1 Por que usar Spock framework?
- 1.1 Por que criar testes automatizados?
- 1.2 Testes que podemos criar com Spock
- 1.3 Por que usar Spock para projetos Java se temos JUnit, TestNG, Mockito etc.?
- 2 Preparando o ambiente para trabalhar com Spock
- 2.1 Configurando o Groovy nas principais IDEs Java
- 2.2 Uso de Groovy em editores de código simples (VS Code, Sublime Text, Vim etc.)
- 2.3 Configurando as dependências Spock do projeto com Maven
- 2.4 Configurando as dependências Spock do projeto com Gradle
- 3 Primeiros testes automatizados com Spock
- 3.1 Primeiro teste: A classe Math calcula potência corretamente?
- 3.2 Executando um teste
- 3.3 O que acontece quando um teste falha
- 3.4 Forçando a execução de várias asserções (ou verificações)
- 3.5 Exemplos de execução de testes no IntelliJ e no Eclipse
- 3.6 Problema na execução de testes no Eclipse 2018 e 2019
- 4 Anatomia de um teste Spock
- 4.1 Testes são chamados de Specifications
- 4.2 Uma classe de teste pode conter vários métodos de teste
- 4.3 Fixture Methods (métodos de montagem)
- 4.4 Blocks (Blocos)
- 4.5 Por que a anatomia do Spock é essa?
- 5 Data-Driven Testing - Facilitando os testes de múltiplos cenários
- 5.1 Testando um Analisador de IMC
- 5.2 Um método, vários cenários
- 5.3 Descrevendo os testes que falham com detalhes dos cenários
- 6 Exception Conditions - Testes à espera de exceções
- 6.1 Às vezes o certo é dar errado
- 6.2 Testando vários cenários de erro
- 6.3 Verificando detalhes das exceções
- 7 Testando com a ajuda de mocks
- 7.1 O que são dublês e por que usá-los
- 7.2 Dependências adicionais para mocks
- 7.3 Configurando retornos de métodos em mocks
- 7.4 Configurando mocks para lançarem exceções
- 7.5 Configurando retornos de métodos aninhados em mocks
- 7.6 Verificando a quantidade de execuções de métodos dos mocks
- 8 Testando RESTful APIs
- 8.1 O que são RESTful APIs e a importância de serem bem testadas
- 8.2 Documentação da API de Cálculo e Banco de IMC
- 8.3 Testando o endpoint GET /imcs/{id}
- 8.4 Testando o endpoint GET /imcs
- 8.5 Testando o endpoint POST /imcs
- 8.6 Testando o endpoint DELETE /imcs/{id}
- 9 Recursos avançados
- 9.1 Ignorando testes
- 9.2 Tolerância de tempo de um teste com @Timeout
- 9.3 Executando os testes na ordem em que estão na classe com @Stepwise
- 9.4 Automatizando a repetição de testes com @Retry
- 9.5 Compartilhando objetos entre testes com @Shared
- 9.6 Restaurando propriedades do sistema com @RestoreSystemProperties
- 9.7 Dando um título para a classe de testes com @Title
- 9.8 Indicando referências
- 10 Relatórios profissionais com Spock Reports Extention
- 10.1 Configurando o Spock Reports Extension
- 10.2 Alterando o diretório de geração do relatório
- 10.3 Anotações @Title, @See e @Issue são usadas nos relatórios
- 11 Testando metaprogramação (anotações)
- 11.1 Metaprogramação em Java: anotações
- 11.2 Por que testar anotações?
- 11.3 Testando anotações de uma entidade JPA
- 12 Testes de integração em projetos Spring
- 12.1 Spring TestContext framework e Spring Module do Spock
- 12.2 Testes de integração em um projeto Spring Boot
- 12.3 Testes de integração em um projeto Spring MVC
- 12.4 Ciclo de vida do contexto Spring nos testes de integração
- 12.5 Profiles e properties do projeto Spring nos testes de integração
- 13 Apêndice A - Guia de Groovy para desenvolvedores Java
- 13.1 Como funciona o Groovy
- 13.2 Características e recursos do Groovy
- 14 Apêndice B - Perguntas frequentes sobre o Spock
- 15 Referências
Dados do produto
- Número de páginas:
- 252
- ISBN:
- 978-85-5519-373-6
- Data publicação:
- 10/2018. Atualizado em 06/2024.