by Silviu Butnariu (sbutnariu@pentalog.fr)
What’s that?
 Unit testing = testing bunches of code, not the whole

application
 PhpUnit was created by Sebastian Berga...
What are the benefits
of unit testing?
 Uncover bugs easier – good tests go trough all possible

program paths
 Assure h...
Installing PhpUnit
 With PEAR:

pear config-set auto_discover 1
pear install phpunit/PHPUnit
 With composer (dependency ...
Basic test
Test result notations
. – success
F – failure
E – error
I – incomplete
S - skipped
Assertions
 Helper functions that compare an expected result with
-

the actual one:
assertEquals()
assertFalse()
assertA...
Dependency injection
 DI is a software pattern that allows the removal of

hard-coded dependencies
 Highly coupled depen...
DI guidelines
 Don’t use ‘new’
 Pass dependencies as method parameters
 DI allows real unit testing, by separating modu...
Mocking objects
 Creating fake objects that act in a predefined and

predictable way
Stubbing methods
 In close relation to mocking
 Stubbing implies faking a method from the mock

object
Static methods
 Avoid static methods

Can’t mock
static calls to
outside classes!
Annotations
 These syntactic metadata are used for specifying
-

some special case behaviors
@covers
@test
@dataProvider
...
Data Provider
 Allows to bunch up more test cases into one, thus

reducing code duplicity
Testing exceptions
setUp & tearDown
 setUp(), tearDown() – executed once for each test method
 setUpBeforeClass(), tearDownAfterClass() - c...
DB testing
 Need extension: pear install phpunit/DbUnit
 Supported dbs: mysql, postgre, oracle, sqlite
 There are 4 sta...
DB testing
 Once setting up the ‘fake’ db connection tests can be

executed to check queries

 The db changes that occur...
Skeleton Generator
 Automatically generates test classes based on

assertions in the code
IDE integration
 Integrated in most ides: Eclipse, NetBeans,

PhpStorm, etc
Code coverage
 Generating statistics with naked PhpUnit
 phpunit -c app/ --coverage-html={foldername}
Code coverage
 FFFFFFF
Documentation
 http://phpunit.de/manual/3.7/en/
Q&A
THANKS !!!
Upcoming SlideShare
Loading in …5
×

Unit Testing in PHP

1,122
-1

Published on

PHP Unit Presentation by Silviu Butnariu held at Pentalog's headquarters in Cluj-Napoca on 26th September 2013.

Published in: Technology
1 Comment
5 Likes
Statistics
Notes
No Downloads
Views
Total Views
1,122
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
14
Comments
1
Likes
5
Embeds 0
No embeds

No notes for slide

Unit Testing in PHP

  1. 1. by Silviu Butnariu (sbutnariu@pentalog.fr)
  2. 2. What’s that?  Unit testing = testing bunches of code, not the whole application  PhpUnit was created by Sebastian Bergamann  It’s part of xUnit family – most used unit testers  Used for automatic tests – makes the machine do the work
  3. 3. What are the benefits of unit testing?  Uncover bugs easier – good tests go trough all possible program paths  Assure high code coverage – measurable code quality indicator  Faster than manual testing  Suitable for teamwork
  4. 4. Installing PhpUnit  With PEAR: pear config-set auto_discover 1 pear install phpunit/PHPUnit  With composer (dependency manager for php); just add to composer.json: { "require-dev": { "phpunit/phpunit": "3.7.*" } } and update the composer
  5. 5. Basic test
  6. 6. Test result notations . – success F – failure E – error I – incomplete S - skipped
  7. 7. Assertions  Helper functions that compare an expected result with - the actual one: assertEquals() assertFalse() assertArrayHasKey() assertInstanceOf() assertNotNull() assertRegExp() etc.
  8. 8. Dependency injection  DI is a software pattern that allows the removal of hard-coded dependencies  Highly coupled dependencies – bad  Loose coupled dependencies - awesome  Improves code readability, reusability
  9. 9. DI guidelines  Don’t use ‘new’  Pass dependencies as method parameters  DI allows real unit testing, by separating modules  Read the DI best practices 
  10. 10. Mocking objects  Creating fake objects that act in a predefined and predictable way
  11. 11. Stubbing methods  In close relation to mocking  Stubbing implies faking a method from the mock object
  12. 12. Static methods  Avoid static methods Can’t mock static calls to outside classes!
  13. 13. Annotations  These syntactic metadata are used for specifying - some special case behaviors @covers @test @dataProvider @expectedException @group etc.
  14. 14. Data Provider  Allows to bunch up more test cases into one, thus reducing code duplicity
  15. 15. Testing exceptions
  16. 16. setUp & tearDown  setUp(), tearDown() – executed once for each test method  setUpBeforeClass(), tearDownAfterClass() - called before the first test of the test case and after the last test
  17. 17. DB testing  Need extension: pear install phpunit/DbUnit  Supported dbs: mysql, postgre, oracle, sqlite  There are 4 stages of db testing: - set up fixture - exercise SUT - verify outcome - teardown  Important methods: - getConnection() - connection data (host,db,pass) - getDataSet() – defines state of DB before each test
  18. 18. DB testing  Once setting up the ‘fake’ db connection tests can be executed to check queries  The db changes that occur during the tests don’t persist  Can verify number of rows after insertion, check query results, etc.  This is the safest way of fully testing an application (versus mocking db connection)
  19. 19. Skeleton Generator  Automatically generates test classes based on assertions in the code
  20. 20. IDE integration  Integrated in most ides: Eclipse, NetBeans, PhpStorm, etc
  21. 21. Code coverage  Generating statistics with naked PhpUnit  phpunit -c app/ --coverage-html={foldername}
  22. 22. Code coverage  FFFFFFF
  23. 23. Documentation  http://phpunit.de/manual/3.7/en/
  24. 24. Q&A
  25. 25. THANKS !!!
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×