Testing

  • 597 views
Uploaded on

 

More in: Sports , Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
597
On Slideshare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
15
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. 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
  • 22. Questions