SlideShare a Scribd company logo
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

Git techtalk
Git techtalkGit techtalk
Git techtalk
joren de groof
 
Tatft
TatftTatft
Something something rack
Something something rackSomething something rack
Something something rack
joren de groof
 

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

真实可查(uofo毕业证书)俄勒冈大学毕业证学位证书范本原版一模一样
真实可查(uofo毕业证书)俄勒冈大学毕业证学位证书范本原版一模一样真实可查(uofo毕业证书)俄勒冈大学毕业证学位证书范本原版一模一样
真实可查(uofo毕业证书)俄勒冈大学毕业证学位证书范本原版一模一样
ra9gairo
 
Belgium vs Romania Injuries and Patience in Belgium’s Euro Cup Germany Squad....
Belgium vs Romania Injuries and Patience in Belgium’s Euro Cup Germany Squad....Belgium vs Romania Injuries and Patience in Belgium’s Euro Cup Germany Squad....
Belgium vs Romania Injuries and Patience in Belgium’s Euro Cup Germany Squad....
Eticketing.co
 
Turkey vs Georgia Turkey's Road to Redemption and Euro 2024 Prospects.pdf
Turkey vs Georgia Turkey's Road to Redemption and Euro 2024 Prospects.pdfTurkey vs Georgia Turkey's Road to Redemption and Euro 2024 Prospects.pdf
Turkey vs Georgia Turkey's Road to Redemption and Euro 2024 Prospects.pdf
Eticketing.co
 
My Personal Brand Key Note presentation.
My Personal Brand  Key Note presentation.My Personal Brand  Key Note presentation.
My Personal Brand Key Note presentation.
ashleymlugaro
 
Serbia vs England Tickets: Serbia Prepares for Historic UEFA Euro 2024 Debut ...
Serbia vs England Tickets: Serbia Prepares for Historic UEFA Euro 2024 Debut ...Serbia vs England Tickets: Serbia Prepares for Historic UEFA Euro 2024 Debut ...
Serbia vs England Tickets: Serbia Prepares for Historic UEFA Euro 2024 Debut ...
Eticketing.co
 
European Championships Football Quiz.pptx
European Championships Football Quiz.pptxEuropean Championships Football Quiz.pptx
European Championships Football Quiz.pptx
PaulGray854697
 
Croatia vs Italy Can Luka Modrić Lead Croatia to Euro Cup Germany Glory in Hi...
Croatia vs Italy Can Luka Modrić Lead Croatia to Euro Cup Germany Glory in Hi...Croatia vs Italy Can Luka Modrić Lead Croatia to Euro Cup Germany Glory in Hi...
Croatia vs Italy Can Luka Modrić Lead Croatia to Euro Cup Germany Glory in Hi...
Eticketing.co
 
Narrated Business Proposal for the Philadelphia Eagles
Narrated Business Proposal for the Philadelphia EaglesNarrated Business Proposal for the Philadelphia Eagles
Narrated Business Proposal for the Philadelphia Eagles
camrynascott12
 
Boletin de la I Copa Panamericana de Voleibol Femenino U17 Guatemala 2024
Boletin de la I Copa Panamericana de Voleibol Femenino U17 Guatemala 2024Boletin de la I Copa Panamericana de Voleibol Femenino U17 Guatemala 2024
Boletin de la I Copa Panamericana de Voleibol Femenino U17 Guatemala 2024
Judith Chuquipul
 
Turkey Hit by Double Injury Blow before of Euro 2024.docx
Turkey Hit by Double Injury Blow before of Euro 2024.docxTurkey Hit by Double Injury Blow before of Euro 2024.docx
Turkey Hit by Double Injury Blow before of Euro 2024.docx
Euro Cup 2024 Tickets
 
Serbia vs England Tickets: Serbia's Return to Euro Cup 2024, A Look at Key Pl...
Serbia vs England Tickets: Serbia's Return to Euro Cup 2024, A Look at Key Pl...Serbia vs England Tickets: Serbia's Return to Euro Cup 2024, A Look at Key Pl...
Serbia vs England Tickets: Serbia's Return to Euro Cup 2024, A Look at Key Pl...
Eticketing.co
 
Ukraine Euro Cup 2024 Squad Sergiy Rebrov's Selections and Prospects.docx
Ukraine Euro Cup 2024 Squad Sergiy Rebrov's Selections and Prospects.docxUkraine Euro Cup 2024 Squad Sergiy Rebrov's Selections and Prospects.docx
Ukraine Euro Cup 2024 Squad Sergiy Rebrov's Selections and Prospects.docx
Euro Cup 2024 Tickets
 
Switzerland vs Germany At UEFA Euro 2024 the Full squad, preview, match sched...
Switzerland vs Germany At UEFA Euro 2024 the Full squad, preview, match sched...Switzerland vs Germany At UEFA Euro 2024 the Full squad, preview, match sched...
Switzerland vs Germany At UEFA Euro 2024 the Full squad, preview, match sched...
Eticketing.co
 
TAM Sports_IPL 17_Commercial Advertising_Report.pdf
TAM Sports_IPL 17_Commercial Advertising_Report.pdfTAM Sports_IPL 17_Commercial Advertising_Report.pdf
TAM Sports_IPL 17_Commercial Advertising_Report.pdf
Social Samosa
 
Gabriel Kalembo A Rising Star in the World of Football Coaching
Gabriel Kalembo A Rising Star in the World of Football CoachingGabriel Kalembo A Rising Star in the World of Football Coaching
Gabriel Kalembo A Rising Star in the World of Football Coaching
gabrielkalembous
 
Turkey vs Georgia Tickets: Turkey's Road to Glory and Building Momentum for U...
Turkey vs Georgia Tickets: Turkey's Road to Glory and Building Momentum for U...Turkey vs Georgia Tickets: Turkey's Road to Glory and Building Momentum for U...
Turkey vs Georgia Tickets: Turkey's Road to Glory and Building Momentum for U...
Eticketing.co
 
JORNADA 10 LIGA MURO 2024BASQUETBOL1.pdf
JORNADA 10 LIGA MURO 2024BASQUETBOL1.pdfJORNADA 10 LIGA MURO 2024BASQUETBOL1.pdf
JORNADA 10 LIGA MURO 2024BASQUETBOL1.pdf
Arturo Pacheco Alvarez
 
Spain vs Italy Spain at Euro Cup 2024 Group, Fixtures, Players to Watch and M...
Spain vs Italy Spain at Euro Cup 2024 Group, Fixtures, Players to Watch and M...Spain vs Italy Spain at Euro Cup 2024 Group, Fixtures, Players to Watch and M...
Spain vs Italy Spain at Euro Cup 2024 Group, Fixtures, Players to Watch and M...
Eticketing.co
 
The Split_ Hardik Pandya and Natasa Stankovic Part Ways News by Betkaro247 (3...
The Split_ Hardik Pandya and Natasa Stankovic Part Ways News by Betkaro247 (3...The Split_ Hardik Pandya and Natasa Stankovic Part Ways News by Betkaro247 (3...
The Split_ Hardik Pandya and Natasa Stankovic Part Ways News by Betkaro247 (3...
bet k247
 
MESH IPL 2024 REport_Wavemaker India.pdf
MESH IPL 2024 REport_Wavemaker India.pdfMESH IPL 2024 REport_Wavemaker India.pdf
MESH IPL 2024 REport_Wavemaker India.pdf
Social Samosa
 

Recently uploaded (20)

真实可查(uofo毕业证书)俄勒冈大学毕业证学位证书范本原版一模一样
真实可查(uofo毕业证书)俄勒冈大学毕业证学位证书范本原版一模一样真实可查(uofo毕业证书)俄勒冈大学毕业证学位证书范本原版一模一样
真实可查(uofo毕业证书)俄勒冈大学毕业证学位证书范本原版一模一样
 
Belgium vs Romania Injuries and Patience in Belgium’s Euro Cup Germany Squad....
Belgium vs Romania Injuries and Patience in Belgium’s Euro Cup Germany Squad....Belgium vs Romania Injuries and Patience in Belgium’s Euro Cup Germany Squad....
Belgium vs Romania Injuries and Patience in Belgium’s Euro Cup Germany Squad....
 
Turkey vs Georgia Turkey's Road to Redemption and Euro 2024 Prospects.pdf
Turkey vs Georgia Turkey's Road to Redemption and Euro 2024 Prospects.pdfTurkey vs Georgia Turkey's Road to Redemption and Euro 2024 Prospects.pdf
Turkey vs Georgia Turkey's Road to Redemption and Euro 2024 Prospects.pdf
 
My Personal Brand Key Note presentation.
My Personal Brand  Key Note presentation.My Personal Brand  Key Note presentation.
My Personal Brand Key Note presentation.
 
Serbia vs England Tickets: Serbia Prepares for Historic UEFA Euro 2024 Debut ...
Serbia vs England Tickets: Serbia Prepares for Historic UEFA Euro 2024 Debut ...Serbia vs England Tickets: Serbia Prepares for Historic UEFA Euro 2024 Debut ...
Serbia vs England Tickets: Serbia Prepares for Historic UEFA Euro 2024 Debut ...
 
European Championships Football Quiz.pptx
European Championships Football Quiz.pptxEuropean Championships Football Quiz.pptx
European Championships Football Quiz.pptx
 
Croatia vs Italy Can Luka Modrić Lead Croatia to Euro Cup Germany Glory in Hi...
Croatia vs Italy Can Luka Modrić Lead Croatia to Euro Cup Germany Glory in Hi...Croatia vs Italy Can Luka Modrić Lead Croatia to Euro Cup Germany Glory in Hi...
Croatia vs Italy Can Luka Modrić Lead Croatia to Euro Cup Germany Glory in Hi...
 
Narrated Business Proposal for the Philadelphia Eagles
Narrated Business Proposal for the Philadelphia EaglesNarrated Business Proposal for the Philadelphia Eagles
Narrated Business Proposal for the Philadelphia Eagles
 
Boletin de la I Copa Panamericana de Voleibol Femenino U17 Guatemala 2024
Boletin de la I Copa Panamericana de Voleibol Femenino U17 Guatemala 2024Boletin de la I Copa Panamericana de Voleibol Femenino U17 Guatemala 2024
Boletin de la I Copa Panamericana de Voleibol Femenino U17 Guatemala 2024
 
Turkey Hit by Double Injury Blow before of Euro 2024.docx
Turkey Hit by Double Injury Blow before of Euro 2024.docxTurkey Hit by Double Injury Blow before of Euro 2024.docx
Turkey Hit by Double Injury Blow before of Euro 2024.docx
 
Serbia vs England Tickets: Serbia's Return to Euro Cup 2024, A Look at Key Pl...
Serbia vs England Tickets: Serbia's Return to Euro Cup 2024, A Look at Key Pl...Serbia vs England Tickets: Serbia's Return to Euro Cup 2024, A Look at Key Pl...
Serbia vs England Tickets: Serbia's Return to Euro Cup 2024, A Look at Key Pl...
 
Ukraine Euro Cup 2024 Squad Sergiy Rebrov's Selections and Prospects.docx
Ukraine Euro Cup 2024 Squad Sergiy Rebrov's Selections and Prospects.docxUkraine Euro Cup 2024 Squad Sergiy Rebrov's Selections and Prospects.docx
Ukraine Euro Cup 2024 Squad Sergiy Rebrov's Selections and Prospects.docx
 
Switzerland vs Germany At UEFA Euro 2024 the Full squad, preview, match sched...
Switzerland vs Germany At UEFA Euro 2024 the Full squad, preview, match sched...Switzerland vs Germany At UEFA Euro 2024 the Full squad, preview, match sched...
Switzerland vs Germany At UEFA Euro 2024 the Full squad, preview, match sched...
 
TAM Sports_IPL 17_Commercial Advertising_Report.pdf
TAM Sports_IPL 17_Commercial Advertising_Report.pdfTAM Sports_IPL 17_Commercial Advertising_Report.pdf
TAM Sports_IPL 17_Commercial Advertising_Report.pdf
 
Gabriel Kalembo A Rising Star in the World of Football Coaching
Gabriel Kalembo A Rising Star in the World of Football CoachingGabriel Kalembo A Rising Star in the World of Football Coaching
Gabriel Kalembo A Rising Star in the World of Football Coaching
 
Turkey vs Georgia Tickets: Turkey's Road to Glory and Building Momentum for U...
Turkey vs Georgia Tickets: Turkey's Road to Glory and Building Momentum for U...Turkey vs Georgia Tickets: Turkey's Road to Glory and Building Momentum for U...
Turkey vs Georgia Tickets: Turkey's Road to Glory and Building Momentum for U...
 
JORNADA 10 LIGA MURO 2024BASQUETBOL1.pdf
JORNADA 10 LIGA MURO 2024BASQUETBOL1.pdfJORNADA 10 LIGA MURO 2024BASQUETBOL1.pdf
JORNADA 10 LIGA MURO 2024BASQUETBOL1.pdf
 
Spain vs Italy Spain at Euro Cup 2024 Group, Fixtures, Players to Watch and M...
Spain vs Italy Spain at Euro Cup 2024 Group, Fixtures, Players to Watch and M...Spain vs Italy Spain at Euro Cup 2024 Group, Fixtures, Players to Watch and M...
Spain vs Italy Spain at Euro Cup 2024 Group, Fixtures, Players to Watch and M...
 
The Split_ Hardik Pandya and Natasa Stankovic Part Ways News by Betkaro247 (3...
The Split_ Hardik Pandya and Natasa Stankovic Part Ways News by Betkaro247 (3...The Split_ Hardik Pandya and Natasa Stankovic Part Ways News by Betkaro247 (3...
The Split_ Hardik Pandya and Natasa Stankovic Part Ways News by Betkaro247 (3...
 
MESH IPL 2024 REport_Wavemaker India.pdf
MESH IPL 2024 REport_Wavemaker India.pdfMESH IPL 2024 REport_Wavemaker India.pdf
MESH IPL 2024 REport_Wavemaker India.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