Especificando e testando em Java com BDD através do Spock
Saiba como praticar o BDD (Behavior-Driven Development) utilizando o Spock como framework de especificações e testes em seus projetos.
ArtigosJavaEspecificando e testando em Java com BDD através do Spock
Por que eu devo ler este artigo:Este artigo mostra como o Spock, um framework de especificações e testes para Java e Groovy, pode ajudá-lo na prática do BDD (Behavior-Driven Development), para o desenvolvimento e garantia da qualidade de software em seus projetos. No decorrer da leitura você também entenderá as diferenças entre os modos reativo e criativo de testes, qual a relação desse último com processos como TDD, ATDD e BDD e seu impacto sobre o papel do teste no desenvolvimento de software.
O artigo apresenta, ainda, um projeto Maven de uma pequena aplicação Spring composta de serviços REST, onde se demonstra o uso do Spock na especificação e execução de testes, geração de relatórios com os resultados em HTML e sua integração tanto com a fase de testes do Maven, através do Surefire, quanto com a infraestrutura de testes do Spring.
A adoção de metodologias ágeis, como Extreme Programming
(XP), Scrum e Kanban, reposiciona e redimensiona o teste a uma das atividades
fundamentais no desenvolvimento de software, não só pela garantia de qualidade
do produto final, mas também para a própria especificação do mesmo. Para melhor
definir e suportar essa atividade foram sendo criadas novas práticas e métodos,
das quais podemos destacar o TDD, ATDD e o BDD. Esses, por sua vez, impulsionaram
o nascimento de frameworks de testes como o JUnit, RSpec, Cucumber e o Spock,
sobre o qual discorremos aqui.
O Spock é um framework de especificação e testes para Java e
Groovy. Através dele podemos aplicar em nosso desenvolvimento conceitos,
notação e estilos do BDD, que, como será visto, definem requisitos de sistema
de forma concisa, expressiva e bastante legível, mesmo para não programadores,
através de especificações e cenários.
Neste artigo veremos como o Spock pode ser aplicado no
desenvolvimento e teste de software utilizando um projeto para uma aplicação
web composto de serviços REST que fornecem informações geoestatísticas de
regiões, estados e municípios do Brasil a partir de dados do IBGE. Em sua
implementação utilizaremos o Spring, mais especificamente o Spring Boot, como
tecnologia base e o Maven como ferramenta de building e gerenciamento de
dependências. Dessa forma, também exploraremos como o Spock pode ser
naturalmente integrado tanto à fase de testes do Maven quanto aos recursos de
testes do Spring.
Contudo, antes de abordarmos o desenvolvimento, vamos
entender melhor o que se quer dizer com concisão, expressividade e legibilidade
de testes, conforme mencionado anteriormente, para melhor avaliar o legado do
BDD e do Spock. Para isso, vamos relembrar a necessidade, função e evolução do
teste no desenvolvimento de software em Java, desde os simples unitários até as
práticas de desenvolvimento orientado a testes, como o TDD, ATDD e o próprio
BDD.
Testes unitários,
integrados e o JUnit
Desde sempre houve a necessidade de se testar no
desenvolvimento de software, seja em Java ou qualquer outra linguagem/ambiente.
Testes visam assegurar que determinado requisito esteja implementado conforme o
esperado após o desenvolvimento. Além disso, eles não precisam ser,
necessariamente, artefatos construídos por desenvolvedores, podendo ser
formulados e conduzidos por, ou com o auxílio, de uma equipe de testes. Neste
artigo, entretanto, abordaremos o teste como uma das responsabilidades do
desenvolvedor, o qual pode cumpri-la das seguintes formas:
Escrevendo testes ad hoc, ou seja, da forma e onde lhe parecer apropriado, o que em
Java costuma resultar em um main() escrito na própria classe
que se quer testar;
Escrevendo classes de teste que podem ser
executadas de maneira automatizada a qualquer momento com a ajuda de um
framework de testes como o JUnit e uma ferramenta de building, como o Ant,
Maven, Gradle, entre outras.
Testes ad hoc
atendem única e exclusivamente a necessidades pontuais de asserção de qualidade
do desenvolvedor que os escreve, e não há como automatizá-los de uma forma
simples. Para ilustrar, vamos imaginar que para implementar o requisito “fornecer um texto
com a data e hora no formato DD/MM/YYYY HH:MM:SS”, tenha sido criada a
classe Clock como apresentada na Listagem
1.
Listagem 1.
Código da classe Clock.
01 package br.com.devmedia.jm.woki.ibgez.misc;
02
03 import java.text.SimpleDateFormat;
04 import java.util.Date;
05 import java.util.Locale;
06
07 public final class Clock {
08 private Clock() {
09 // util
10 }
11
12 public static final String DATEFORMAT = "dd/MM/yyyy HH:mm:ss";
13
14 public static String now() {
15 return new SimpleDateFormat(DATEFORMAT, Locale.getDefault()).format(new Date());
16 }
17 }
Um teste ad hoc
para o método Clock.now() poderia se
resumir à inserção de um main() na
classe, como mostra a Listagem 2.
Listagem 2.
Código da classe Clock com um teste ad hoc.
01 public final class Clock {
02 ...
03 public static void main(String[] args) {
04 System.out.println(Clock.now());
05 }
06 }
Note que o método de asserção do desenvolvedor foi
simplesmente checar se o resultado de System.out.println()
corresponde ao esperado, ou seja, o teste é um artifício feito em tempo de desenvolvimento
para ser executado manualmente — e essa é a natureza do teste ad hoc.
Agora, para ilustrar um teste utilizando o JUnit, observemos
a classe de teste da Listagem 3.
Listagem 3.
Uma classe de teste com JUnit para Clock.
Recomendamos começar pelo Plano de Estudo Carreira Programador Front-End. Essa área da programação é mais visual e intuitiva, tornando-a ideal para iniciantes. No Front-End, você aprenderá a criar a parte visual dos sites, como layout, cores e interatividade. Depois de dominar o Front-End, você pode avançar para Programador Back-End, onde aprenderá a lidar com a lógica e o funcionamento interno dos sites, e, finalmente, para Programador Mobile, focando no desenvolvimento de aplicativos para smartphones. Nossa metodologia é estruturada de forma progressiva para garantir que você desenvolva confiança e experiência ao criar projetos reais, como sites estáticos e dinâmicos.
Em quanto tempo vou me tornar um programador?
O tempo necessário para se tornar um programador varia de acordo com a dedicação de cada estudante. Com nossa metodologia, que inclui um Plano de Estudo detalhado e suporte contínuo, você pode se tornar um programador de 6 meses a um ano, dependendo do seu ritmo e esforço. Nossa abordagem prática e orientada a projetos ajudará a acelerar seu aprendizado.
Eu preciso de um diploma de faculdade para começar a atuar como programador?
Não. Ser programador é uma excelente oportunidade para quem não possui diploma de faculdade. Muitas empresas contratam baseadas nas habilidades técnicas e experiência prática, não necessariamente em diplomas. Após conquistar uma vaga, você pode optar por complementar sua formação com um diploma.
Por que a programação se tornou a profissão mais promissora da atualidade?
A necessidade de programadores cresceu exponencialmente, especialmente após a pandemia de Covid-19, que forçou muitas empresas a se adaptarem ao digital. Com o crescimento das empresas de tecnologia, a demanda por programadores aumentou. Atualmente, há mais de 200 mil vagas abertas no Brasil devido à falta de profissionais qualificados.
Metodologia
Quais são os principais diferenciais da DevMedia?
Didática e Metodologia
Com mais de 20 anos de experiência, nossa metodologia foca em menos aulas e mais prática. Desenvolvemos dezenas de projetos e exercícios para ajudar você a se tornar um programador completo. Nossos projetos são desafiadores e autênticos, não apenas exercícios repetitivos.
Projetos reais e exercícios
Você desenvolverá diversos projetos práticos em cada carreira (Front-End, Back-End e Mobile), recebendo mentoria e suporte contínuo. A prática é essencial, e oferecemos milhares de exercícios para ajudar você a fixar o conteúdo e melhorar sua posição no ranking.
Suporte ao aluno
Nossa plataforma oferece suporte dedicado com professores experientes, respondendo suas dúvidas em menos de uma hora. Isso garante que você receba a ajuda necessária durante toda a sua jornada de aprendizado.
Gamificação
A DevMedia utiliza gamificação para tornar o aprendizado mais envolvente e motivador. Você acumula pontos e moedas por acertos, que podem ser trocados por produtos e customizações no seu card pessoal. Além disso, o sistema de ranking mensal incentiva a competição amigável e a melhoria contínua.
O que eu irei aprender estudando pela DevMedia?
Ao estudar conosco, você se tornará um programador Full Stack, dominando Front-End, Back-End e Mobile. Utilizamos a linguagem JavaScript, a mais utilizada no mercado, preparando você para criar sistemas webs e aplicativos celulares. Nossa abordagem prática inclui exercícios para fixar o conhecimento e desenvolvimento de projetos reais que te preparam, para o mercado de trabalho.
Quais as vantagens de aprender programação através da linguagem JavaScript?
Ela é Multiplataforma, ela vai te permitir programar para web e para celulares utilizando praticamente a mesma sintaxe.
Elá é Full Stack. Ela te permite criar aplicações Front-end, Back-end e Mobile. Isso acelera muito sua carreira e aumenta suas possibilidades de pegar trabalhos autônomos e conquistar uma vaga no mercado.
Ela é fácil de aprender. Como ela não exige conhecimento inicial em “Orientação a Objetos” ela se torna mais simples com uma curva de aprendizado suave e vai te permitir começar a programar mais rápido do que outras linguagens
A plataforma oferece certificados?
Sim, oferecemos dois tipos de certificados: o certificado de conclusão, que você adquire ao consumir o conteúdo, e o certificado de autoridade, que você obtém ao acertar exercícios. Ambos possuem carga horária, que pode ser utilizada para fins acadêmicos, como atividades complementares na faculdade, e também para comprovações em processos seletivos ou no seu currículo.
A plataforma tem suporte ao aluno, como funciona?
Sim, temos uma equipe de programadores pronta para ajudar com todas as suas dúvidas! Durante o horário comercial, o tempo médio de resposta é de até 10 minutos. E não se preocupe, também oferecemos suporte à noite e nos finais de semana, com um prazo de resposta um pouco maior.
A DevMedia me forma como programador Full Stack?
Sim! Oferecemos uma formação completa, do zero até Full Stack. Nosso foco é na prática, então você vai encontrar muitos exercícios e projetos reais ao longo do curso. Garantimos que você sairá com a autonomia necessária para desenvolver seus próprios projetos com confiança!
Tem horário para as aulas?
Não, não temos horários fixos para as aulas. Todo o nosso conteúdo está disponível para você acessar a qualquer momento, permitindo que você estude conforme sua própria disponibilidade e ritmo. Dessa forma, você pode integrar o aprendizado à sua rotina de maneira mais flexível e eficaz.
Por que a DevMedia não usa videoaulas em sua didática?
Nosso foco principal é formar programadores de verdade. Sabemos que o dia a dia de um programador envolve muita leitura, interpretação e escrita de código. Por isso, nosso conteúdo é desenvolvido para ambientar você nesse processo desde o início, proporcionando mais autonomia e acelerando seu aprendizado.
Na vídeo-aula é o professor que está lendo, interpretando e escrevndo o código para você, isso limita o seu progresso. Ao ler e interagir diretamente com o conteúdo, você exercita sua capacidade de leitura e concentração, além de poder avançar no seu próprio ritmo. Dessa forma, você se torna um programador mais independente e preparado para os desafios reais do mercado.
Preciso de um computador específico para estudar na DevMedia?
Não é necessário nada específico. Qualquer computador com processador atual e memória de 8 GB é suficiente.
Eu consigo estudar pelo celular?
Sim, a DevMedia possui um aplicativo que te permite seguir com seus estudos de qualquer lugar.
A DevMedia tem aplicativo?
Sim, nosso aplicativo está disponível na Play Store e na Apple Store, permitindo que você estude de forma prática e conveniente em qualquer lugar.
Preciso estar na faculdade para acompanhar os estudos na DevMedia?
Não, a faculdade não é necessária. Você não precisa de nenhum conhecimento prévio para iniciar os estudos na nossa plataforma.
Assinatura e Pagamentos
Quais são os planos de assinatura disponíveis?
Oferecemos o plano anual, o valor total é lançado no cartão de crédito, parcelado em 12 vezes, e você precisa dispor do valor total no limite do seu cartão. Você também pode optar por pagar no PIX
Adquirindo o plano, terei acesso a todo o conteúdo?
Sim, ao assinar nossa plataforma, você desbloqueia acesso total a todo o nosso conteúdo, sem precisar comprar nada separadamente.
A plataforma tem planos vitalícios?
Não, nossos planos são anuais, garantindo que você tenha acesso contínuo às atualizações mais recentes e aos novos conteúdos. A tecnologia evolui rapidamente, e um plano vitalício oferece um conteúdo estático que se tornará ultrapassado em pouco tempo. Com nossos planos anuais, você está sempre à frente, aprendendo as novidades e tendências mais atuais no mundo da programação.
A DevMedia tem fidelidade?
Sim, nosso plano tem uma fidelidade de 12 meses, o que garante o tempo ideal para você explorar nosso conteúdo e desenvolver a autonomia necessária para trabalhar com programação.
Como funciona o cancelamento?
Nós garantimos seu direito de cancelamento com reembolso total dentro dos primeiros 7 dias.
Para que você aproveite ao máximo seu investimento, oferecemos suporte personalizado para orientá-lo na utilização da plataforma. Também temos a opção de transferência de titularidade do plano, permitindo que outra pessoa aproveite o restante do seu período de assinatura.
Cadastro
Como excluir meus dados da plataforma?
Para excluir seus dados da plataforma, acesse o link : https://www.devmedia.com.br/fale-conosco/ e abra um protocolo de 'Exclusão de dados'. Nossa equipe processará a solicitação e removerá todas as informações do seu cadastro.