SlideShare a Scribd company logo
1 of 22
Download to read offline
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

More Related Content

More from 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
 

Recently uploaded

Belgium Vs Romania First look at Romania UEFA at the start of EURO 2024.docx
Belgium Vs Romania First look at Romania UEFA at the start of EURO 2024.docxBelgium Vs Romania First look at Romania UEFA at the start of EURO 2024.docx
Belgium Vs Romania First look at Romania UEFA at the start of EURO 2024.docxWorld Wide Tickets And Hospitality
 
Italy Vs Albania Italy squad for Euro Cup 2024 Who should be in the starting ...
Italy Vs Albania Italy squad for Euro Cup 2024 Who should be in the starting ...Italy Vs Albania Italy squad for Euro Cup 2024 Who should be in the starting ...
Italy Vs Albania Italy squad for Euro Cup 2024 Who should be in the starting ...World Wide Tickets And Hospitality
 
Romania vs Ukraine Euro 2024 Prediction Who will get off to a great start in ...
Romania vs Ukraine Euro 2024 Prediction Who will get off to a great start in ...Romania vs Ukraine Euro 2024 Prediction Who will get off to a great start in ...
Romania vs Ukraine Euro 2024 Prediction Who will get off to a great start in ...Eticketing.co
 
virat kohli presentation in life jurney
virat kohli presentation in life  jurneyvirat kohli presentation in life  jurney
virat kohli presentation in life jurneyjaydeeplabana77
 
JORNADA 7 LIGA MURO 2024BASQUETBOL12.pdf
JORNADA 7 LIGA MURO 2024BASQUETBOL12.pdfJORNADA 7 LIGA MURO 2024BASQUETBOL12.pdf
JORNADA 7 LIGA MURO 2024BASQUETBOL12.pdfArturo Pacheco Alvarez
 
Techniques for those who create fantasy sports Developers
Techniques for those who create fantasy sports DevelopersTechniques for those who create fantasy sports Developers
Techniques for those who create fantasy sports DevelopersAndrew Mathew
 
Ozan Tufan Eyes Turkey Return and Portugal Finalizes Euro 2024 Squad.docx
Ozan Tufan Eyes Turkey Return and Portugal Finalizes Euro 2024 Squad.docxOzan Tufan Eyes Turkey Return and Portugal Finalizes Euro 2024 Squad.docx
Ozan Tufan Eyes Turkey Return and Portugal Finalizes Euro 2024 Squad.docxEuro Cup 2024 Tickets
 
2024 IFFL DRAFT LOTTERY REVIEW-5.12.2024
2024 IFFL DRAFT LOTTERY REVIEW-5.12.20242024 IFFL DRAFT LOTTERY REVIEW-5.12.2024
2024 IFFL DRAFT LOTTERY REVIEW-5.12.2024Brian Slack
 
Smart Coach Radar For Volleyball - Pocke Radar
Smart Coach Radar For Volleyball - Pocke RadarSmart Coach Radar For Volleyball - Pocke Radar
Smart Coach Radar For Volleyball - Pocke RadarPocket Radar Inc.
 
Albania Vs Spain Albania and Serbia in the race to host EURO 2027 AFF formali...
Albania Vs Spain Albania and Serbia in the race to host EURO 2027 AFF formali...Albania Vs Spain Albania and Serbia in the race to host EURO 2027 AFF formali...
Albania Vs Spain Albania and Serbia in the race to host EURO 2027 AFF formali...World Wide Tickets And Hospitality
 
IPL Betting ID: The best cricket ID provider | The best beting ID
IPL Betting ID: The best cricket ID provider | The best beting IDIPL Betting ID: The best cricket ID provider | The best beting ID
IPL Betting ID: The best cricket ID provider | The best beting IDsilverexchange id
 
Silverexchange ID: To play on the Silver Exchange, Get ID from Virat777
Silverexchange ID: To play on the Silver Exchange, Get ID from Virat777Silverexchange ID: To play on the Silver Exchange, Get ID from Virat777
Silverexchange ID: To play on the Silver Exchange, Get ID from Virat777silverexchange id
 
Jual obat aborsi Madiun ( 085657271886 ) Cytote pil telat bulan penggugur kan...
Jual obat aborsi Madiun ( 085657271886 ) Cytote pil telat bulan penggugur kan...Jual obat aborsi Madiun ( 085657271886 ) Cytote pil telat bulan penggugur kan...
Jual obat aborsi Madiun ( 085657271886 ) Cytote pil telat bulan penggugur kan...ZurliaSoop
 
Croatia Vs Albania Spain vs Croatia Prediction, Croatia odds-on favorites for...
Croatia Vs Albania Spain vs Croatia Prediction, Croatia odds-on favorites for...Croatia Vs Albania Spain vs Croatia Prediction, Croatia odds-on favorites for...
Croatia Vs Albania Spain vs Croatia Prediction, Croatia odds-on favorites for...World Wide Tickets And Hospitality
 
TAM Sports-IPL 17 Advertising Report- M01 - M55.xlsx - IPL 17 FCT (Commercial...
TAM Sports-IPL 17 Advertising Report- M01 - M55.xlsx - IPL 17 FCT (Commercial...TAM Sports-IPL 17 Advertising Report- M01 - M55.xlsx - IPL 17 FCT (Commercial...
TAM Sports-IPL 17 Advertising Report- M01 - M55.xlsx - IPL 17 FCT (Commercial...Social Samosa
 
Nirupam Singh on Fan Development, Growth, and the Future of Formula 1
Nirupam Singh on Fan Development, Growth, and the Future of Formula 1Nirupam Singh on Fan Development, Growth, and the Future of Formula 1
Nirupam Singh on Fan Development, Growth, and the Future of Formula 1Neil Horowitz
 
Top 10 French Footballers for Euro Cup 2024.docx
Top 10 French Footballers for Euro Cup 2024.docxTop 10 French Footballers for Euro Cup 2024.docx
Top 10 French Footballers for Euro Cup 2024.docxEuro Cup 2024 Tickets
 
NFL SOAP BOX WEEKLY REPORTS- 2024 NFL Schedules
NFL SOAP BOX WEEKLY REPORTS- 2024 NFL SchedulesNFL SOAP BOX WEEKLY REPORTS- 2024 NFL Schedules
NFL SOAP BOX WEEKLY REPORTS- 2024 NFL SchedulesBrian Slack
 

Recently uploaded (19)

Belgium Vs Romania First look at Romania UEFA at the start of EURO 2024.docx
Belgium Vs Romania First look at Romania UEFA at the start of EURO 2024.docxBelgium Vs Romania First look at Romania UEFA at the start of EURO 2024.docx
Belgium Vs Romania First look at Romania UEFA at the start of EURO 2024.docx
 
Italy Vs Albania Italy squad for Euro Cup 2024 Who should be in the starting ...
Italy Vs Albania Italy squad for Euro Cup 2024 Who should be in the starting ...Italy Vs Albania Italy squad for Euro Cup 2024 Who should be in the starting ...
Italy Vs Albania Italy squad for Euro Cup 2024 Who should be in the starting ...
 
Romania vs Ukraine Euro 2024 Prediction Who will get off to a great start in ...
Romania vs Ukraine Euro 2024 Prediction Who will get off to a great start in ...Romania vs Ukraine Euro 2024 Prediction Who will get off to a great start in ...
Romania vs Ukraine Euro 2024 Prediction Who will get off to a great start in ...
 
virat kohli presentation in life jurney
virat kohli presentation in life  jurneyvirat kohli presentation in life  jurney
virat kohli presentation in life jurney
 
JORNADA 7 LIGA MURO 2024BASQUETBOL12.pdf
JORNADA 7 LIGA MURO 2024BASQUETBOL12.pdfJORNADA 7 LIGA MURO 2024BASQUETBOL12.pdf
JORNADA 7 LIGA MURO 2024BASQUETBOL12.pdf
 
Techniques for those who create fantasy sports Developers
Techniques for those who create fantasy sports DevelopersTechniques for those who create fantasy sports Developers
Techniques for those who create fantasy sports Developers
 
Ozan Tufan Eyes Turkey Return and Portugal Finalizes Euro 2024 Squad.docx
Ozan Tufan Eyes Turkey Return and Portugal Finalizes Euro 2024 Squad.docxOzan Tufan Eyes Turkey Return and Portugal Finalizes Euro 2024 Squad.docx
Ozan Tufan Eyes Turkey Return and Portugal Finalizes Euro 2024 Squad.docx
 
2024 IFFL DRAFT LOTTERY REVIEW-5.12.2024
2024 IFFL DRAFT LOTTERY REVIEW-5.12.20242024 IFFL DRAFT LOTTERY REVIEW-5.12.2024
2024 IFFL DRAFT LOTTERY REVIEW-5.12.2024
 
Smart Coach Radar For Volleyball - Pocke Radar
Smart Coach Radar For Volleyball - Pocke RadarSmart Coach Radar For Volleyball - Pocke Radar
Smart Coach Radar For Volleyball - Pocke Radar
 
Albania Vs Spain Albania and Serbia in the race to host EURO 2027 AFF formali...
Albania Vs Spain Albania and Serbia in the race to host EURO 2027 AFF formali...Albania Vs Spain Albania and Serbia in the race to host EURO 2027 AFF formali...
Albania Vs Spain Albania and Serbia in the race to host EURO 2027 AFF formali...
 
IPL Betting ID: The best cricket ID provider | The best beting ID
IPL Betting ID: The best cricket ID provider | The best beting IDIPL Betting ID: The best cricket ID provider | The best beting ID
IPL Betting ID: The best cricket ID provider | The best beting ID
 
Austria Vs France Euro Cup predictions and tips.docx
Austria Vs France Euro Cup predictions and tips.docxAustria Vs France Euro Cup predictions and tips.docx
Austria Vs France Euro Cup predictions and tips.docx
 
Silverexchange ID: To play on the Silver Exchange, Get ID from Virat777
Silverexchange ID: To play on the Silver Exchange, Get ID from Virat777Silverexchange ID: To play on the Silver Exchange, Get ID from Virat777
Silverexchange ID: To play on the Silver Exchange, Get ID from Virat777
 
Jual obat aborsi Madiun ( 085657271886 ) Cytote pil telat bulan penggugur kan...
Jual obat aborsi Madiun ( 085657271886 ) Cytote pil telat bulan penggugur kan...Jual obat aborsi Madiun ( 085657271886 ) Cytote pil telat bulan penggugur kan...
Jual obat aborsi Madiun ( 085657271886 ) Cytote pil telat bulan penggugur kan...
 
Croatia Vs Albania Spain vs Croatia Prediction, Croatia odds-on favorites for...
Croatia Vs Albania Spain vs Croatia Prediction, Croatia odds-on favorites for...Croatia Vs Albania Spain vs Croatia Prediction, Croatia odds-on favorites for...
Croatia Vs Albania Spain vs Croatia Prediction, Croatia odds-on favorites for...
 
TAM Sports-IPL 17 Advertising Report- M01 - M55.xlsx - IPL 17 FCT (Commercial...
TAM Sports-IPL 17 Advertising Report- M01 - M55.xlsx - IPL 17 FCT (Commercial...TAM Sports-IPL 17 Advertising Report- M01 - M55.xlsx - IPL 17 FCT (Commercial...
TAM Sports-IPL 17 Advertising Report- M01 - M55.xlsx - IPL 17 FCT (Commercial...
 
Nirupam Singh on Fan Development, Growth, and the Future of Formula 1
Nirupam Singh on Fan Development, Growth, and the Future of Formula 1Nirupam Singh on Fan Development, Growth, and the Future of Formula 1
Nirupam Singh on Fan Development, Growth, and the Future of Formula 1
 
Top 10 French Footballers for Euro Cup 2024.docx
Top 10 French Footballers for Euro Cup 2024.docxTop 10 French Footballers for Euro Cup 2024.docx
Top 10 French Footballers for Euro Cup 2024.docx
 
NFL SOAP BOX WEEKLY REPORTS- 2024 NFL Schedules
NFL SOAP BOX WEEKLY REPORTS- 2024 NFL SchedulesNFL SOAP BOX WEEKLY REPORTS- 2024 NFL Schedules
NFL SOAP BOX WEEKLY REPORTS- 2024 NFL Schedules
 

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