Testes Automatizados em Ruby on Rails

3,865 views
3,789 views

Published on

Apresentação da defesa de monografia de Testes automatizados em Ruby on Rails

Published in: Technology
0 Comments
6 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
3,865
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
46
Comments
0
Likes
6
Embeds 0
No embeds

No notes for slide

Testes Automatizados em Ruby on Rails

  1. 1. Introdução a Testes Automatizados em Ruby On Rails Thiago Cifani Ayres Escola
  2. 2. Tópicos <ul><li>Histórico </li></ul><ul><ul><li>Manifesto Ágil </li></ul></ul><ul><li>Tecnologias Utilizadas </li></ul><ul><ul><li>Ruby </li></ul></ul><ul><ul><li>Rails </li></ul></ul><ul><li>Testes Automatizados </li></ul><ul><ul><li>Ruby On Rails </li></ul></ul><ul><ul><li>TDD </li></ul></ul><ul><ul><li>BDD </li></ul></ul><ul><ul><ul><li>Rspec </li></ul></ul></ul><ul><ul><ul><li>Cucumber </li></ul></ul></ul>Introdução a Testes Automatizados em Ruby On Rails
  3. 3. Manifesto Ágil Introdução a Testes Automatizados em Ruby On Rails Fonte: http://scrumex.com.br/blog/?p=28
  4. 4. Tecnologias Utilizadas Introdução a Testes Automatizados em Ruby On Rails
  5. 5. Introdução a Testes Automatizados em Ruby On Rails <ul><li>Criada em 1995 por Yukihiro Matsumoto (Matz) </li></ul><ul><li>Linguagem de Script </li></ul><ul><li>Linguagem com Tipagem Dinâmica </li></ul><ul><li>Sintaxe Enxuta </li></ul><ul><li>Tudo é objeto </li></ul><ul><li>Baseada em ADA, LISP, SmallTalk , Python, Perl </li></ul><ul><li>Versão Atual 1.9.2 </li></ul><ul><li>RVM ( Ruby Virtual Mananger ) </li></ul><ul><li>RubyGems </li></ul>
  6. 6. Introdução a Testes Automatizados em Ruby On Rails # A classe Saudação class Saudacao    def initialize(name)      @name = name.capitalize    end      def sauda      puts &quot;Olá #{@name}!&quot;    end end   # Criar um novo objeto ola = Saudacao.new(&quot;mundo&quot;)   # Saída: &quot;Olá Mundo!&quot; ola.sauda 3.times { print “thiago” } #saída : thiago thiago thiago [‘um’,‘dois’,‘tres’].each {|num| puts num.capitalize } #saida Um Dois Tres “ thiago”.reverse #saída: ogaiht 1.upto(5) { |x| puts x } #saída: 1 2 3 4 5 # Declaração de Classes # Simplicidade # Legibilidade # Agilidade # Sintaxe Enxuta
  7. 7. Introdução a Testes Automatizados em Ruby On Rails <ul><li>Criado em 2005 por David Hanemeier Hannson (DHH) </li></ul><ul><li>BaseCamp </li></ul><ul><li>Facilitar o desenvolvimento Web </li></ul><ul><li>CoC (Convention over Configuration) </li></ul><ul><li>DRY ( Don’t Repeat Yourself) </li></ul><ul><li>KISS ( Keep it Simple Stupid ) </li></ul>
  8. 8. Introdução a Testes Automatizados em Ruby On Rails <h1>Users#show</h1> <p>User: <%= @user . name %> </p> <p>Email: <%= @user . email if @user . email %> </p> class UsersController < ApplicationController       def show      @user = User . find(params [ :id ] )    end end # Model # Controller # View class User < ActiveRecord::Base has_many :teams end user.rb users_controller.rb show.html.erb
  9. 9. Testes Automatizados Introdução a Testes Automatizados em Ruby On Rails
  10. 10. Testes em Rails <ul><li>Teste Unitário </li></ul><ul><li>test “produto.nome deve ser igual a camisa” do </li></ul><ul><li>@produto = produto.new </li></ul><ul><li>assert_equal “camisa”, @produto.nome </li></ul><ul><li>end </li></ul>Introdução a Testes Automatizados em Ruby On Rails should &quot;get new&quot; do      get :new      assert_response :success    end <ul><li>Teste de Controlador </li></ul>
  11. 11. Testes em Rails <ul><li>Fixtures </li></ul><ul><li>redcross: </li></ul><ul><li>   id: 1 </li></ul><ul><li>   name: Red Cross </li></ul><ul><li>   name_slug: red-cross </li></ul><ul><li>   contact: lalala </li></ul><ul><li>   city: Springfield </li></ul><ul><li>   city_slug: springfield </li></ul><ul><li>   country: USA </li></ul><ul><li>   needs: Lots of rice </li></ul><ul><li>   password: 1 </li></ul><ul><li>   email: a@a.a </li></ul><ul><li>   announcer: announcer </li></ul>Introdução a Testes Automatizados em Ruby On Rails Fonte: https://github.com/thoughtworks/letshelp.it/blob/master/test/fixtures/organizations.yml
  12. 12. TDD Introdução a Testes Automatizados em Ruby On Rails Test Driven Development é uma prática de desenvolvimento que envolve escrever teste antes de escrever código a ser testado. Começa escrevendo um pequeno teste para o código que ainda não existe. [ CHE, 2010 ]
  13. 13. TDD Introdução a Testes Automatizados em Ruby On Rails
  14. 14. TDD Introdução a Testes Automatizados em Ruby On Rails <ul><li>Escreva um teste que falhe </li></ul>require 'spec_helper' describe Team do end team_spec.rb
  15. 15. TDD Introdução a Testes Automatizados em Ruby On Rails <ul><li>Saída do Teste </li></ul>/home/thiagocifani/.rvm/gems/ruby-1.9.2-p180/gems/rspec-core-2.5.2/lib/rspec/core/backward_compatibility.rb:20:in `const_missing': uninitialized constant Team (NameError)
  16. 16. TDD Introdução a Testes Automatizados em Ruby On Rails <ul><li>Faça o mínimo para fazê-lo passar </li></ul>class Team < ActiveRecord::Base end # Saída Finished in 0 seconds 0 examples, 0 failures
  17. 17. TDD Introdução a Testes Automatizados em Ruby On Rails <ul><li>Escreva um teste que falhe </li></ul>describe Team do it &quot;should not save a Team with blank name&quot; do @team = Team.new(:name => &quot;&quot;) @team.should_not be_valid end end team_spec.rb
  18. 18. TDD Introdução a Testes Automatizados em Ruby On Rails <ul><li>Saída do Teste </li></ul>F Failures: 1) Team should not save a Team with blank name Failure/Error: @team.should_not be_valid expected valid? to return false, got true # ./spec/models/team_spec.rb:7:in `block (2 levels) in <top (required)>' Finished in 0.04004 seconds 1 example, 1 failure rake aborted!
  19. 19. TDD Introdução a Testes Automatizados em Ruby On Rails <ul><li>Faça o mínimo para fazê-lo passar </li></ul>class Team < ActiveRecord::Base validates_presence_of :name end . Finished in 0.04472 seconds 1 example, 0 failures # Saída
  20. 20. TDD Introdução a Testes Automatizados em Ruby On Rails <ul><li>Refatore se possível </li></ul>describe Team do it &quot;should not save a Team with blank name&quot; do @team = Team.new(:name => &quot;&quot;) @team.should_not be_valid end end
  21. 21. TDD Introdução a Testes Automatizados em Ruby On Rails <ul><li>Refatore se possível </li></ul>describe Team do it { should validates_presence_of :name} end
  22. 22. TDD Introdução a Testes Automatizados em Ruby On Rails <ul><li>Escreva um teste que falhe </li></ul>describe Team do it { should validates_presence_of :name} it { should validates_uniqueness_of :name} end . F Failures: 1) Team Failure/Error: it {should validate_uniqueness_of :name} Can't find first Team # ./spec/models/team_spec.rb:10:in `block (2 levels) in <top (required)>' Finished in 0.13438 seconds 2 examples, 1 failure rake aborted!
  23. 23. TDD Introdução a Testes Automatizados em Ruby On Rails <ul><li>Faça o mínimo para fazê-lo passar </li></ul>class Team < ActiveRecord::Base validates_presence_of :name validates_uniqueness_of :name end .. Finished in 0.04472 seconds 2 example, 0 failures # Saída describe Team do before do @team = Factory(:team) end it { should validates_presence_of :name} it { should validates_uniqueness_of :name} end
  24. 24. BDD Introdução a Testes Automatizados em Ruby On Rails BDD (Behavior Driven Development) baseia-se na descrição do comportamento da aplicação baseado na opinião dos clientes.
  25. 25. BDD Introdução a Testes Automatizados em Ruby On Rails Os três princípios são: O suficiente é suficiente: Designs gigantescos, análises intermináveis. Deve-se fazer o menos possível para começar e, qualquer coisa além disso, é um desperdício. Isso também nos ajuda a pensar em sempre automatizar as tarefas repetitivas como deploy e build; Entregar algo de valor: Se você está fazendo algo que não tem valor ou não está aumentando sua habilidade de entregar valor, pare e faça outra coisa; Tudo é comportamento: Independente se é em nível de codificação, aplicação ou algo além, deve-se sempre usar o mesmo pensamento e linguística de construção para descrever comportamento em qualquer nível de granularidade.
  26. 26. Rspec Introdução a Testes Automatizados em Ruby On Rails O RSpec é uma DSL (Domain-Specific Language) para especificar o comportamento desejado do código Ruby
  27. 27. Rspec Introdução a Testes Automatizados em Ruby On Rails • Subject Code : O código cujo comportamento está sendo especificando com o RSpec; • Expectation: Uma expressão de como o subject code deve se comportar; • Code Example: Um exemplo executável de como o subject code pode ser usado e como o seu comportamento esperado (expresso com expectations) em um determinado contexto; • Example group : Grupo de code examples.
  28. 28. Rspec Introdução a Testes Automatizados em Ruby On Rails require 'spec_helper' describe Team do before(:each) do @team = Factory(:team) end it {should validate_presence_of :name} it {should validate_uniqueness_of :name} it {should belong_to :user } end end end
  29. 29. Cucumber Introdução a Testes Automatizados em Ruby On Rails O Cucumber é um framework de alto nível para testes automatizados. Mais utilizado para testes de aceitação, ele permite descrever uma estória e implementar o código de acordo com essa estória.
  30. 30. Cucumber Introdução a Testes Automatizados em Ruby On Rails • Feature : Define a funcionalidade do sistema. • Scenario : Define um possível cenário da aplicação. • Given : Usado para determinar o estado da aplicação no momento que o teste é executado; • When : Usado para especificar as ações a serem executadas; • Then : Usado para especificar o resultado esperado. • And : Usa-se como adendo, podendo unir vários Given/When/Then.
  31. 31. Feature Introdução a Testes Automatizados em Ruby On Rails Feature: home As a user I want to see the teams link to go to the team list page Scenario: Go to the team list page Given I visit the home page When I click on Teams link Then should go to the team list page rake cucumber
  32. 32. Steps Introdução a Testes Automatizados em Ruby On Rails Given /^I visit the home page$/ do peding… end When /^I click on Teams link$/ do pending… end Then /^should go to the team list page$/ do pending… end
  33. 33. Steps Introdução a Testes Automatizados em Ruby On Rails Given /^I visit the home page$/ do visit root_path end When /^I click on Teams link$/ do click_link &quot;Teams List&quot; end Then /^should go to the team list page$/ do visit teams_path end
  34. 34. Conclusão Introdução a Testes Automatizados em Ruby On Rails Utilizando testes automatizados podemos garantir que o software que estamos escrevendo realmente atende a necessidade estabelecida por nosso cliente. Quando escrevemos o código e terminamos, realmente terminamos.
  35. 35. FIM Introdução a Testes Automatizados em Ruby On Rails

×