Práticas de Testes – Parte 1

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:

  1. 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ê.
  2. 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”
  3. 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.
  4. Rspec
    • Framework Behaviour Driven Development para Ruby. Foco no comportamento. Descreve o comportamento em um nível muito mais granular.
  5. Webrat
    • Teste de aceitação para aplicações Web em Ruby. Um simulador de Browser. 
  6. 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.
  7. JRuby
  8. 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