SlideShare una empresa de Scribd logo
1 de 22
Descargar para leer sin conexión
Testing
Test Driven Development


• Implementation
• Red-Green-Refactor
• Regression Tests
Implementation


• Test what should happen
• Test what should not happen
Red-Green-Refactor
      Add a test

     Run all tests
   Write some code

  Run the tests again

    Refactor code
Regression Tests

Change environment

Change code

Is everything still working
Testing in php

$this->get(quot;http://myserver/login.phpquot;);
$this->assertWantedPattern(quot;Please login to continuequot;);

$this->setField(quot;usernamequot;, quot;MyTestUserquot;);
$this->setField(quot;passwordquot;, quot;t0ps3cr3tquot;);
$this->clickSubmit(quot;Loginquot;);

$this->assertWantedPattern(quot;You are logged inquot;);
Testing in Java

beginAt(quot;login.jspquot;);
assertTextInElement(quot;h1quot;, quot;Please login to continuequot;);

setFormElement(quot;usernamequot;, quot;MyTestUserquot;);
setFormElement(quot;passwordquot;, quot;t0ps3cr3tquot;);
submit();

assertTextInElement(quot;h1quot;, quot;You are logged inquot;);
Testing in Rails

visit login_path
assert_contain quot;Please login to continuequot;

fill_in quot;usernamequot;, :with => quot;MyTestUserquot;
fill_in quot;passwordquot;, :with => quot;t0ps3cr3tquot;
click_button quot;Loginquot;

assert_contain quot;You are logged inquot;
Test Types

• Unit
• Functional
• Integration
Unit


• Most basic level of testing
• Model tests in Rails
Unit Testing
                          class ShipTest
class Ship
                           def test_crew
 attr_accessor :captain
                             ship = Ship.new
 attr_accessor :maties
                             ship.captain = 1
                             ship.mateys = 20
 def crew
  captain + maties
                            assert_equal 21, ship.crew
 end
                           end
end
                          end
Functional


• Test lifecycle of objects
• Controller tests in Rails
Functional Testing
class ShipsController
 def enter_other_ship
  @ship = Ship.find_captain(params[:captain])
  @ship.gold += 1000
  @ship.save
  redirect_to :action => 'show_loot'
 end
end                          class ShipsControllerTest
                              def test_entering_other_ship
                               post 'enter_other_ship', :captain => quot;Sparrowquot;

                              assert_response :redirect
                              assert_equal quot;Black Pearlquot;, assign(:ship).name
                              assert_equal 1000, assigns(:ship).gold
                             end
                            end
Integration

• Overall application functionalities
• Walk through a series of events
• View Tests / Stories
Integration Testing
                                    def test_attacking_other_ships
                                     Given quot;another shipquot; do |ship|
                                      @ship_to_enter = Ship.find(ship)
                                     end

                                     Given quot;my shipquot; do
Story: Attacking other ships          @my_ship = Ship.find_by_captain(quot;Sparrowquot;)
 As Captain Sparrow                  end
 I attack another ship
 So I can buy more rum               Given /my $number_of_mateys maties/ do |number_of_mateys|
                                      @ship_to_enter.attackers = number_of_mateys
                                     end
 Scenario: Attack first ship
 Given another ship                  When quot;we attach the other shipquot; do
 And my ship                          @my_ship.attacks(@ship_to_enter)
 And my 20 mateys                    end
 When we attack the other ship
 Then 1 pirate dies                  Then /$pirates_lost pirate dies/ do |pirates_lost|
                                      assert_equal @my_schip.crew - pirates_lost, @ship_to_enter.attackers
 And we steel 1000 pieces of gold
                                     end

                                     Then /we steel $pieces_of_gold pieces of gold/ do |pieces_of_gold|
                                      assert_equal pieces_of_gold, @my_ship.gold
                                     end
                                    end
Integration Testing
  Story: Attacking other ships
   As Captain Sparrow
   I attack another ship
   So I can buy more rum

   Scenario: Attack first ship
   Given another ship
   And my ship
   And my 20 mateys
   When we attack the other ship
   Then 1 pirate dies
   And we steel 1000 pieces of gold
def test_attacking_other_ships
 Given quot;another shipquot; do |ship|
  @ship_to_enter = Ship.find(ship)
 end

 Given quot;my shipquot; do
  @my_ship = Ship.find_by_captain(quot;Sparrowquot;)
 end

 Given /my $number_of_mateys maties/ do |number_of_mateys|
  @ship_to_enter.attackers = number_of_mateys
 end

 When quot;we attach the other shipquot; do
  @my_ship.attacks(@ship_to_enter)
 end

 Then /$pirates_lost pirate dies/ do |pirates_lost|
  assert_equal @my_schip.crew - pirates_lost, @ship_to_enter.attackers
 end

 Then /we steel $pieces_of_gold pieces of gold/ do |pieces_of_gold|
  assert_equal pieces_of_gold, @my_ship.gold
 end
end
Test Data


• Mock/stub
• Fixtures
• Factories
Mocking & Stubbing
   def test_getting_tweet_on_homepage
    response = mock
    response.stubs(:authorization).returns(true)
    response.stubs(:last_tweet).resturns(quot;#arrrrcamp rocksquot;)
    TwitterAPI.expects(:get_last_tweet).returns(response)

    get 'index'
    assert_equal quot;#arrrrcamp rocksquot;, assigns(:tweet).body
   end



- Mocha
- Rspec
- Flex Mock
Fixtures
pirates.yml              ships.yml
 captain_jack_sparrow:   black_pearl:
  name: Jack Sparrow      name: The Black Pearl
  enemy: Royal Navy       max_crew: 85
                          captain: captain_jack_sparrow
                         interceptor:
                           name: The Interceptor
                           max_crew: 150
                           captain: captain_jack_sparrow
Factories
Factory.sequence :pirate do |n|
 quot;matey#{n}quot;
end

Factory.define :ship do |f|             should quot;only find big shipsquot; do
 f.name     'Pirateship'                Factory(:ship, :max_crew => 500)
 f.max_crew 100                         Factory(:ship, :max_crew => 200)
 f.captain { Factory.next(:pirate) }
end                                     ships = Ship.big_ones
                                        assert_equal 1, ships.size
                                       end

- Factory Girl
- Machinist
- Object Daddy
- Foundry
- Fixjour
Questions

Más contenido relacionado

Más de joren de groof (10)

Git techtalk
Git techtalkGit techtalk
Git techtalk
 
Tatft
TatftTatft
Tatft
 
Something something rack
Something something rackSomething something rack
Something something rack
 
Rubyandrails
RubyandrailsRubyandrails
Rubyandrails
 
Rails Servers
Rails ServersRails Servers
Rails Servers
 
Radiant
RadiantRadiant
Radiant
 
Prawn
PrawnPrawn
Prawn
 
Mistakes
MistakesMistakes
Mistakes
 
Git
GitGit
Git
 
Cucumber
CucumberCucumber
Cucumber
 

Último

Personal Brand Exploration - By Bradley Dennis
Personal Brand Exploration - By Bradley DennisPersonal Brand Exploration - By Bradley Dennis
Personal Brand Exploration - By Bradley Dennisjocksofalltradespodc
 
Albania Vs Spain South American coaches lead Albania to Euro 2024 spot.docx
Albania Vs Spain South American coaches lead Albania to Euro 2024 spot.docxAlbania Vs Spain South American coaches lead Albania to Euro 2024 spot.docx
Albania Vs Spain South American coaches lead Albania to Euro 2024 spot.docxWorld Wide Tickets And Hospitality
 
Trusted Cricket Betting ID Provider In India: Get your Cricket ID Now
Trusted Cricket Betting ID Provider In India: Get your Cricket ID NowTrusted Cricket Betting ID Provider In India: Get your Cricket ID Now
Trusted Cricket Betting ID Provider In India: Get your Cricket ID Nowbacklinks165
 
Hire 💕 8617370543 Amethi Call Girls Service Call Girls Agency
Hire 💕 8617370543 Amethi Call Girls Service Call Girls AgencyHire 💕 8617370543 Amethi Call Girls Service Call Girls Agency
Hire 💕 8617370543 Amethi Call Girls Service Call Girls AgencyNitya salvi
 
Genuine 8617370543 Hot and Beautiful 💕 Etah Escorts call Girls
Genuine 8617370543 Hot and Beautiful 💕 Etah Escorts call GirlsGenuine 8617370543 Hot and Beautiful 💕 Etah Escorts call Girls
Genuine 8617370543 Hot and Beautiful 💕 Etah Escorts call GirlsNitya salvi
 
UEFA Euro 2024 Clash and Eurovision 2024 Poll Insights.docx
UEFA Euro 2024 Clash and Eurovision 2024 Poll Insights.docxUEFA Euro 2024 Clash and Eurovision 2024 Poll Insights.docx
UEFA Euro 2024 Clash and Eurovision 2024 Poll Insights.docxEuro Cup 2024 Tickets
 
Unveiling the Mystery of Main Bazar Chart
Unveiling the Mystery of Main Bazar ChartUnveiling the Mystery of Main Bazar Chart
Unveiling the Mystery of Main Bazar ChartChart Kalyan
 
Luka Modric Elevating Croatia's Stars for Euro Cup 2024.docx
Luka Modric Elevating Croatia's Stars for Euro Cup 2024.docxLuka Modric Elevating Croatia's Stars for Euro Cup 2024.docx
Luka Modric Elevating Croatia's Stars for Euro Cup 2024.docxEuro Cup 2024 Tickets
 
Belgium Vs Slovakia Belgium at Euro 2024 Teams in group, fixtures, schedule, ...
Belgium Vs Slovakia Belgium at Euro 2024 Teams in group, fixtures, schedule, ...Belgium Vs Slovakia Belgium at Euro 2024 Teams in group, fixtures, schedule, ...
Belgium Vs Slovakia Belgium at Euro 2024 Teams in group, fixtures, schedule, ...World Wide Tickets And Hospitality
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...Health
 
Italy Vs Albania Italy vs Albania Euro 2024 Prediction Can Albania pull off a...
Italy Vs Albania Italy vs Albania Euro 2024 Prediction Can Albania pull off a...Italy Vs Albania Italy vs Albania Euro 2024 Prediction Can Albania pull off a...
Italy Vs Albania Italy vs Albania Euro 2024 Prediction Can Albania pull off a...World Wide Tickets And Hospitality
 
Netherlands Players expected to miss UEFA Euro 2024 due to injury.docx
Netherlands Players expected to miss UEFA Euro 2024 due to injury.docxNetherlands Players expected to miss UEFA Euro 2024 due to injury.docx
Netherlands Players expected to miss UEFA Euro 2024 due to injury.docxEuro Cup 2024 Tickets
 
Spain to be banned from participating in Euro 2024.docx
Spain to be banned from participating in Euro 2024.docxSpain to be banned from participating in Euro 2024.docx
Spain to be banned from participating in Euro 2024.docxEuro Cup 2024 Tickets
 
Croatia vs Italy Inter Milan Looking to Carry On Success at Euro 2024.pdf
Croatia vs Italy Inter Milan Looking to Carry On Success at Euro 2024.pdfCroatia vs Italy Inter Milan Looking to Carry On Success at Euro 2024.pdf
Croatia vs Italy Inter Milan Looking to Carry On Success at Euro 2024.pdfEticketing.co
 
JORNADA 6 LIGA MURO 2024TUXTEPECOAXACA.pdf
JORNADA 6 LIGA MURO 2024TUXTEPECOAXACA.pdfJORNADA 6 LIGA MURO 2024TUXTEPECOAXACA.pdf
JORNADA 6 LIGA MURO 2024TUXTEPECOAXACA.pdfArturo Pacheco Alvarez
 
Churu Escorts 🥰 8617370543 Call Girls Offer VIP Hot Girls
Churu Escorts 🥰 8617370543 Call Girls Offer VIP Hot GirlsChuru Escorts 🥰 8617370543 Call Girls Offer VIP Hot Girls
Churu Escorts 🥰 8617370543 Call Girls Offer VIP Hot GirlsDeepika Singh
 
basketball evolution History Slides.pdf
basketball evolution  History Slides.pdfbasketball evolution  History Slides.pdf
basketball evolution History Slides.pdftishvidphotography
 
Cricket Api Solution.pdfCricket Api Solution.pdf
Cricket Api Solution.pdfCricket Api Solution.pdfCricket Api Solution.pdfCricket Api Solution.pdf
Cricket Api Solution.pdfCricket Api Solution.pdfLatiyalinfotech
 

Último (19)

Personal Brand Exploration - By Bradley Dennis
Personal Brand Exploration - By Bradley DennisPersonal Brand Exploration - By Bradley Dennis
Personal Brand Exploration - By Bradley Dennis
 
Slovenia Vs Serbia Eurovision odds Slovenia have top.docx
Slovenia Vs Serbia Eurovision odds Slovenia have top.docxSlovenia Vs Serbia Eurovision odds Slovenia have top.docx
Slovenia Vs Serbia Eurovision odds Slovenia have top.docx
 
Albania Vs Spain South American coaches lead Albania to Euro 2024 spot.docx
Albania Vs Spain South American coaches lead Albania to Euro 2024 spot.docxAlbania Vs Spain South American coaches lead Albania to Euro 2024 spot.docx
Albania Vs Spain South American coaches lead Albania to Euro 2024 spot.docx
 
Trusted Cricket Betting ID Provider In India: Get your Cricket ID Now
Trusted Cricket Betting ID Provider In India: Get your Cricket ID NowTrusted Cricket Betting ID Provider In India: Get your Cricket ID Now
Trusted Cricket Betting ID Provider In India: Get your Cricket ID Now
 
Hire 💕 8617370543 Amethi Call Girls Service Call Girls Agency
Hire 💕 8617370543 Amethi Call Girls Service Call Girls AgencyHire 💕 8617370543 Amethi Call Girls Service Call Girls Agency
Hire 💕 8617370543 Amethi Call Girls Service Call Girls Agency
 
Genuine 8617370543 Hot and Beautiful 💕 Etah Escorts call Girls
Genuine 8617370543 Hot and Beautiful 💕 Etah Escorts call GirlsGenuine 8617370543 Hot and Beautiful 💕 Etah Escorts call Girls
Genuine 8617370543 Hot and Beautiful 💕 Etah Escorts call Girls
 
UEFA Euro 2024 Clash and Eurovision 2024 Poll Insights.docx
UEFA Euro 2024 Clash and Eurovision 2024 Poll Insights.docxUEFA Euro 2024 Clash and Eurovision 2024 Poll Insights.docx
UEFA Euro 2024 Clash and Eurovision 2024 Poll Insights.docx
 
Unveiling the Mystery of Main Bazar Chart
Unveiling the Mystery of Main Bazar ChartUnveiling the Mystery of Main Bazar Chart
Unveiling the Mystery of Main Bazar Chart
 
Luka Modric Elevating Croatia's Stars for Euro Cup 2024.docx
Luka Modric Elevating Croatia's Stars for Euro Cup 2024.docxLuka Modric Elevating Croatia's Stars for Euro Cup 2024.docx
Luka Modric Elevating Croatia's Stars for Euro Cup 2024.docx
 
Belgium Vs Slovakia Belgium at Euro 2024 Teams in group, fixtures, schedule, ...
Belgium Vs Slovakia Belgium at Euro 2024 Teams in group, fixtures, schedule, ...Belgium Vs Slovakia Belgium at Euro 2024 Teams in group, fixtures, schedule, ...
Belgium Vs Slovakia Belgium at Euro 2024 Teams in group, fixtures, schedule, ...
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 
Italy Vs Albania Italy vs Albania Euro 2024 Prediction Can Albania pull off a...
Italy Vs Albania Italy vs Albania Euro 2024 Prediction Can Albania pull off a...Italy Vs Albania Italy vs Albania Euro 2024 Prediction Can Albania pull off a...
Italy Vs Albania Italy vs Albania Euro 2024 Prediction Can Albania pull off a...
 
Netherlands Players expected to miss UEFA Euro 2024 due to injury.docx
Netherlands Players expected to miss UEFA Euro 2024 due to injury.docxNetherlands Players expected to miss UEFA Euro 2024 due to injury.docx
Netherlands Players expected to miss UEFA Euro 2024 due to injury.docx
 
Spain to be banned from participating in Euro 2024.docx
Spain to be banned from participating in Euro 2024.docxSpain to be banned from participating in Euro 2024.docx
Spain to be banned from participating in Euro 2024.docx
 
Croatia vs Italy Inter Milan Looking to Carry On Success at Euro 2024.pdf
Croatia vs Italy Inter Milan Looking to Carry On Success at Euro 2024.pdfCroatia vs Italy Inter Milan Looking to Carry On Success at Euro 2024.pdf
Croatia vs Italy Inter Milan Looking to Carry On Success at Euro 2024.pdf
 
JORNADA 6 LIGA MURO 2024TUXTEPECOAXACA.pdf
JORNADA 6 LIGA MURO 2024TUXTEPECOAXACA.pdfJORNADA 6 LIGA MURO 2024TUXTEPECOAXACA.pdf
JORNADA 6 LIGA MURO 2024TUXTEPECOAXACA.pdf
 
Churu Escorts 🥰 8617370543 Call Girls Offer VIP Hot Girls
Churu Escorts 🥰 8617370543 Call Girls Offer VIP Hot GirlsChuru Escorts 🥰 8617370543 Call Girls Offer VIP Hot Girls
Churu Escorts 🥰 8617370543 Call Girls Offer VIP Hot Girls
 
basketball evolution History Slides.pdf
basketball evolution  History Slides.pdfbasketball evolution  History Slides.pdf
basketball evolution History Slides.pdf
 
Cricket Api Solution.pdfCricket Api Solution.pdf
Cricket Api Solution.pdfCricket Api Solution.pdfCricket Api Solution.pdfCricket Api Solution.pdf
Cricket Api Solution.pdfCricket Api Solution.pdf
 

Testing

  • 2. Test Driven Development • Implementation • Red-Green-Refactor • Regression Tests
  • 3. Implementation • Test what should happen • Test what should not happen
  • 4. Red-Green-Refactor Add a test Run all tests Write some code Run the tests again Refactor code
  • 5. Regression Tests Change environment Change code Is everything still working
  • 6. Testing in php $this->get(quot;http://myserver/login.phpquot;); $this->assertWantedPattern(quot;Please login to continuequot;); $this->setField(quot;usernamequot;, quot;MyTestUserquot;); $this->setField(quot;passwordquot;, quot;t0ps3cr3tquot;); $this->clickSubmit(quot;Loginquot;); $this->assertWantedPattern(quot;You are logged inquot;);
  • 7. Testing in Java beginAt(quot;login.jspquot;); assertTextInElement(quot;h1quot;, quot;Please login to continuequot;); setFormElement(quot;usernamequot;, quot;MyTestUserquot;); setFormElement(quot;passwordquot;, quot;t0ps3cr3tquot;); submit(); assertTextInElement(quot;h1quot;, quot;You are logged inquot;);
  • 8. Testing in Rails visit login_path assert_contain quot;Please login to continuequot; fill_in quot;usernamequot;, :with => quot;MyTestUserquot; fill_in quot;passwordquot;, :with => quot;t0ps3cr3tquot; click_button quot;Loginquot; assert_contain quot;You are logged inquot;
  • 9. Test Types • Unit • Functional • Integration
  • 10. Unit • Most basic level of testing • Model tests in Rails
  • 11. Unit Testing class ShipTest class Ship def test_crew attr_accessor :captain ship = Ship.new attr_accessor :maties ship.captain = 1 ship.mateys = 20 def crew captain + maties assert_equal 21, ship.crew end end end end
  • 12. Functional • Test lifecycle of objects • Controller tests in Rails
  • 13. Functional Testing class ShipsController def enter_other_ship @ship = Ship.find_captain(params[:captain]) @ship.gold += 1000 @ship.save redirect_to :action => 'show_loot' end end class ShipsControllerTest def test_entering_other_ship post 'enter_other_ship', :captain => quot;Sparrowquot; assert_response :redirect assert_equal quot;Black Pearlquot;, assign(:ship).name assert_equal 1000, assigns(:ship).gold end end
  • 14. Integration • Overall application functionalities • Walk through a series of events • View Tests / Stories
  • 15. Integration Testing def test_attacking_other_ships Given quot;another shipquot; do |ship| @ship_to_enter = Ship.find(ship) end Given quot;my shipquot; do Story: Attacking other ships @my_ship = Ship.find_by_captain(quot;Sparrowquot;) As Captain Sparrow end I attack another ship So I can buy more rum Given /my $number_of_mateys maties/ do |number_of_mateys| @ship_to_enter.attackers = number_of_mateys end Scenario: Attack first ship Given another ship When quot;we attach the other shipquot; do And my ship @my_ship.attacks(@ship_to_enter) And my 20 mateys end When we attack the other ship Then 1 pirate dies Then /$pirates_lost pirate dies/ do |pirates_lost| assert_equal @my_schip.crew - pirates_lost, @ship_to_enter.attackers And we steel 1000 pieces of gold end Then /we steel $pieces_of_gold pieces of gold/ do |pieces_of_gold| assert_equal pieces_of_gold, @my_ship.gold end end
  • 16. Integration Testing Story: Attacking other ships As Captain Sparrow I attack another ship So I can buy more rum Scenario: Attack first ship Given another ship And my ship And my 20 mateys When we attack the other ship Then 1 pirate dies And we steel 1000 pieces of gold
  • 17. def test_attacking_other_ships Given quot;another shipquot; do |ship| @ship_to_enter = Ship.find(ship) end Given quot;my shipquot; do @my_ship = Ship.find_by_captain(quot;Sparrowquot;) end Given /my $number_of_mateys maties/ do |number_of_mateys| @ship_to_enter.attackers = number_of_mateys end When quot;we attach the other shipquot; do @my_ship.attacks(@ship_to_enter) end Then /$pirates_lost pirate dies/ do |pirates_lost| assert_equal @my_schip.crew - pirates_lost, @ship_to_enter.attackers end Then /we steel $pieces_of_gold pieces of gold/ do |pieces_of_gold| assert_equal pieces_of_gold, @my_ship.gold end end
  • 18. Test Data • Mock/stub • Fixtures • Factories
  • 19. Mocking & Stubbing def test_getting_tweet_on_homepage response = mock response.stubs(:authorization).returns(true) response.stubs(:last_tweet).resturns(quot;#arrrrcamp rocksquot;) TwitterAPI.expects(:get_last_tweet).returns(response) get 'index' assert_equal quot;#arrrrcamp rocksquot;, assigns(:tweet).body end - Mocha - Rspec - Flex Mock
  • 20. Fixtures pirates.yml ships.yml captain_jack_sparrow: black_pearl: name: Jack Sparrow name: The Black Pearl enemy: Royal Navy max_crew: 85 captain: captain_jack_sparrow interceptor: name: The Interceptor max_crew: 150 captain: captain_jack_sparrow
  • 21. Factories Factory.sequence :pirate do |n| quot;matey#{n}quot; end Factory.define :ship do |f| should quot;only find big shipsquot; do f.name 'Pirateship' Factory(:ship, :max_crew => 500) f.max_crew 100 Factory(:ship, :max_crew => 200) f.captain { Factory.next(:pirate) } end ships = Ship.big_ones assert_equal 1, ships.size end - Factory Girl - Machinist - Object Daddy - Foundry - Fixjour