Alguns dias atrás fiz uma tecnical session na empresa que trabalho, Bluesoft, sobre práticas de testes para projetos java utilizando ferramentas em Ruby. Como existem desenvolvedores Java que não conhecem as ferramentas de teste do Ruby, essa sessão foi apenas para demonstrar o funcionamento básico de ferramentas como Cucumber e Rspec. Posteriormente pretendo apresentar coisas mais avançadas dessas ferramentas.
A apresentação se baseou nos tópicos:
- TDD
- É uma prática de desenvolvimento que envolve escrever o código antes de ser testado. Escrevendo um pequeno teste de um código que ainda não exista. Rodar o teste e, naturalmente, falhar. Agora escreva apenas o suficiente para fazer o teste passar. Quanto estiverem passando, observe o resultado do design e refatore para remover alguma duplicação que você vê.
- BDD
- O problema é testar o que o objeto é, e não o que ele faz. O que ele faz é significamente mas importante. Pense no nível de aplicação, como se você estivesse falando com uma pessoa de negócio. Exemplo:“Um cliente deve realizar um pedido” ou “o pedido deve ser guardado em um banco de dados relacional ANSI-compiant”
- Cucumber
- Uma ferramenta BDD que lê textos puros que descreve as caracteristicas da aplicação, com exemplos em cenários, e usa os passos desse cenário (step definitions) para automatizar a interação com o código sendo desenvolvido. Os cenários são parseados e tratados como códigos reais, proporcionando benefícios inestimáveis como acompanhar os passos pelos textos, e suporte a múltiplos idiomas.
- Rspec
- Framework Behaviour Driven Development para Ruby. Foco no comportamento. Descreve o comportamento em um nível muito mais granular.
- Webrat
- Teste de aceitação para aplicações Web em Ruby. Um simulador de Browser.
- O que tem a ver?
- Programadores Java devem estar se perguntando: O que todas essas ferramentas tem a ver comigo?
- Conhecer várias linguagens nos torna melhores programadores.
- As ferramentas em ruby podem ser utilizada em projetos Java graças ao JRuby.
- Existem plugins do Maven para facilitar essa integração. E você pode ajudar a desenvolvê-los. Como esse aqui.
- JRuby
- Demo. A seguir os passos executados na apresentação:
- Criar um projeto Maven no Eclipse chamada “biblioteca”
- No diretório raiz do projeto digitar os comandos:
- jruby -S rails .
- jruby -S script/generate cucumber
- jruby -S script/generate rspec
- Como será utilizado Rspec, a pasta test pode ser removida
- Criar o arquivo /features/funcionario_manipula_livros.feature
- Editar esse arquivo com o conteúdo:
Feature: funcionario manipula os livros
Como um funcionário
Eu quero cadastrar um livro
E quero relacionar livros do mesmo genero
Scenario: cadastrar um livro
Given um livro novo
When eu entro no cadastro
Then eu deveria cadastrar ele
And o sistema deveria dizer "Livro cadastrado com sucesso"
- Executar o comando abaixo para mostrar os passos pendentes
- jruby -S cucumber features -n
- Observe o retorno. O que está em amarelo é um passo pendente para ser implementado:
Feature: funcionario manipula os livros
Como um funcion#rio
Eu quero cadastrar um livro
E quero relacionar livros do mesmo genero
Scenario: cadastrar um livro
Given um livro novo
When eu entro no cadastro
Then eu deveria cadastrar ele
And o sistema deveria dizer "Livro cadastrado com sucesso"
1 scenario
4 steps pending (4 with no step definition)
- Executar comandos git
- git init
- git add -A
- git commit -a -m “Importe inicial do projeto”
Por enquanto só foi preparado o ambiente para a Demo. Em breve colocarei a segunda parte desse post com a implementação do Sistema de Biblioteca usado na apresentação. Os slides apresentados podem ser visualizados aqui: RSpec-Cucumber