The most unknown parts ofPHPUnitBastian Feder         IPC Spring 2011 Berlinllapistano@php.net              1st June 2011
Me, myself & I JavaScript since 2002 PHP since 2001 Trainer & coach Opensource addict   PHP manual translations   FluentDO...
CLI
… on the command line -- testdox[-(html|text)]         -- filter <pattern> generates a especially styled    filters which ...
… on the command line                            (cont.) -- strict marks test without an assertion as incomplete. Use in c...
Annotations
Annotations „In software programming, annotations are used mainly for the purpose of expanding code documentation and comm...
Annotations              (cont.)/** @covers, @group * @covers myClass::run * @group exceptions * @group Trac-123 */public ...
Annotations              (cont.)    Depending on other testspublic function testIsApcAvailable() {     if ( ! extension_lo...
Assertions
Assertions „In computer programming, an assertion is a predicate (for example a true–false statement) placed in a program ...
Assertions          (cont.) assertContains(), assertContainsOnly() Cameleon within the asserts, handles    Strings ( like ...
Assertions         (cont.) assertXMLFileEqualsXMLFile() assertXMLStringEqualsXMLFile() assertXMLStringEqualsXMLString() $t...
Assertions      (cont.)     $ phpunit XmlFileEqualsXmlFileTest.php     PHPUnit 3.4.15 by Sebastian Bergmann.     …     1) ...
Assertions           (cont.) assertAttribute*() Asserts the content of a class attribute regardless its visibility […]    ...
Assertions         (cont.) assertType() // TYPE_OBJECT $this->assertType( FluentDOM, new FluentDOM ); $this->assertInstanc...
Assertions         (cont.) assertSelectRegExp() $xml =       <items version="1.0">        <persons>          <person class...
Assertions         (cont.) assertThat() Evaluates constraints to build complex assertions. $this->assertThat(     $expecte...
Weaving in
Test Listeners Get called on several states of the test runner   startTest   endTest   addIncompleteTest   …
Test Listeners            (cont.) Configuration   Add to your phpunit.xml <listeners>   <listener class="myListener"      ...
Test Listeners               (cont.)      Implementation exampleclass ListenerLog implements PHPUnit_Framework_TestListene...
Specialities
Special tests Testing exceptions     @expectedException /**  * @expectedException InvalidArgumentException  */ public func...
Special tests         (cont.) Testing exceptions   setExpectedException( Exception )     for internal use only!!     dont ...
Special tests              (cont.)    Testing exceptions      try/catch      Does not work when using --strict switchpubli...
Special tests            (cont.) public function callbackGetObject($name, $className = ) {     retrun strtolower($name) ==...
Special tests             (cont.)[…]$application = $this->getMock(FluentDOM);$application    ->expects($this->any())    ->...
Special tests              (cont.)    implicit integration testspublic function testGet() {      $mock = $this->getMock(  ...
Questions@lapistanolapistano@php.net
Slidesn contact Please comment the talk on joind.in   http://joind.in/3518 Slides   http://slideshare.net/lapistano Email:...
PHP5.3 Powerworkshop               New features of PHP5.3               Best Pratices using OOP               PHPUnit     ...
License            This set of slides and the source code included        in the download package is licensed under theCr...
Upcoming SlideShare
Loading in...5
×

Php unit the-mostunknownparts

2,342

Published on

A lot of people using PHPunit for testing their source code. While I was observing my team I recognized most of them are only using the standard assertions like 'assertEquals()' and are complaining about how hard it is to test the code even when the tests are written first. This talk is about all the stuff not used on a daily basis and it digs deep into uncommon features of PHPUnit.

Published in: Education
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,342
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
0
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Transcript of "Php unit the-mostunknownparts"

  1. 1. The most unknown parts ofPHPUnitBastian Feder IPC Spring 2011 Berlinllapistano@php.net 1st June 2011
  2. 2. Me, myself & I JavaScript since 2002 PHP since 2001 Trainer & coach Opensource addict PHP manual translations FluentDOM ...
  3. 3. CLI
  4. 4. … on the command line -- testdox[-(html|text)] -- filter <pattern> generates a especially styled filters which testsuite to run. test report. $ phpunit --filter Handler --testdox ./ PHPUnit 3.4.15 by Sebastian Bergmann. FluentDOMCore [x] Get handler FluentDOMHandler [x] Insert nodes after [x] Insert nodes before
  5. 5. … on the command line (cont.) -- strict marks test without an assertion as incomplete. Use in combination with –verbose to get the name of the test. -- coverage-(html|source|clover) <(dir|file)> generates a report on how many lines of the code has how often been executed. -- group <groupname [, groupname]> runs only the named group(s). -- d key[=value] alter ini-settings (e.g. memory_limit, max_execution_time)
  6. 6. Annotations
  7. 7. Annotations „In software programming, annotations are used mainly for the purpose of expanding code documentation and comments. They are typically ignored when the code is compiled or executed.“ ( Wikipedia: http://en.wikipedia.org/w/index.php?title=Annotation&oldid=385076084 )
  8. 8. Annotations (cont.)/** @covers, @group * @covers myClass::run * @group exceptions * @group Trac-123 */public function testInvalidArgumentException() { $obj = new myClass(); try{ $obj->run( invalidArgument ); $this->fail(Expected exception not thrown.); } catch ( InvalidArgumentException $e ) { }}
  9. 9. Annotations (cont.) Depending on other testspublic function testIsApcAvailable() { if ( ! extension_loaded( apc ) ) { $this->markTestSkipped( Required APC not available ); }}/** * @depend testIsApcAvailable */public function testGetFileFromAPC () {}
  10. 10. Assertions
  11. 11. Assertions „In computer programming, an assertion is a predicate (for example a true–false statement) placed in a program to indicate that the developer thinks that the predicate is always true at that place. [...] It may be used to verify that an assumption made by the programmer during the implementation of the program remains valid when the program is executed.. [...]“ (Wikipedia, http://en.wikipedia.org/w/index.php?title=Assertion_(computing)&oldid=382473744)
  12. 12. Assertions (cont.) assertContains(), assertContainsOnly() Cameleon within the asserts, handles Strings ( like strpos() ) Arrays ( like in_array() )$this->assertContains(bar, foobar); // ✓$this->assertContainsOnly(string, array(1, 2, 3)); // ✗
  13. 13. Assertions (cont.) assertXMLFileEqualsXMLFile() assertXMLStringEqualsXMLFile() assertXMLStringEqualsXMLString() $this->assertXMLFileEqualsXMLFile( /path/to/Expected.xml, /path/to/Fixture.xml );
  14. 14. Assertions (cont.) $ phpunit XmlFileEqualsXmlFileTest.php PHPUnit 3.4.15 by Sebastian Bergmann. … 1) XmlFileEqualsXmlFileTest::testFailure Failed asserting that two strings are equal. --- Expected +++ Actual @@ -1,4 +1,4 @@ <?xml version="1.0"?> <foo> - <bar/> + <baz/> </foo> /dev/tests/XmlFileEqualsXmlFileTest.php:7
  15. 15. Assertions (cont.) assertAttribute*() Asserts the content of a class attribute regardless its visibility […] private $collection = array( 1, 2, 3 ); private $name = Jakob; […] $this->assertAttributeContainsOnly( integer, collection, new myClass ); $this->assertAttributeContains( ko, name, new myClass );
  16. 16. Assertions (cont.) assertType() // TYPE_OBJECT $this->assertType( FluentDOM, new FluentDOM ); $this->assertInstanceOf( FluentDOM, new FluentDOM ); // TYPE_STRING $this->assertInternalType( string, 4221 ); // TYPE_INTEGER $this->assertInternalType( integer, 4221 ); // TYPE_RESSOURCE $this->assertInternalType( resource, fopen(/file.txt, r );
  17. 17. Assertions (cont.) assertSelectRegExp() $xml = <items version="1.0"> <persons> <person class="firstname">Thomas</person> <person class="firstname">Jakob</person> <person class="firstname">Bastian</person> </persons> </items> ; $this->assertSelectRegExp( person[class*="name"],(Jakob|Bastian), 2, $xml);
  18. 18. Assertions (cont.) assertThat() Evaluates constraints to build complex assertions. $this->assertThat( $expected, $ths->logicalAnd( $this->isInstanceOf(tire), $this->logicalNot( $this->identicalTo($myFrontTire) ) ) );
  19. 19. Weaving in
  20. 20. Test Listeners Get called on several states of the test runner startTest endTest addIncompleteTest …
  21. 21. Test Listeners (cont.) Configuration Add to your phpunit.xml <listeners> <listener class="myListener" file="PATH/TO/YOUR/CODE"> <arguments> <string>build/log</string> </arguments> </listener> </listeners>
  22. 22. Test Listeners (cont.) Implementation exampleclass ListenerLog implements PHPUnit_Framework_TestListener{ public function __construct($path) { $this->path = $path; } public function startTestSuite(PHPUnit_Framework_TestSuite $suite) { $this->log("Test suite %s precesed.n", $test->getName()); }}
  23. 23. Specialities
  24. 24. Special tests Testing exceptions @expectedException /** * @expectedException InvalidArgumentException */ public function testInvalidArgumentException() { $obj = new myClass(); $obj->run(invalidArgument); }
  25. 25. Special tests (cont.) Testing exceptions setExpectedException( Exception ) for internal use only!! dont use it directly any more.
  26. 26. Special tests (cont.) Testing exceptions try/catch Does not work when using --strict switchpublic function testInvalidArgumentException() { $obj = new myClass(); try{ $obj->run( invalidArgument ); $this->fail(Expected exception not thrown.); } catch ( InvalidArgumentException $e ) { }}
  27. 27. Special tests (cont.) public function callbackGetObject($name, $className = ) { retrun strtolower($name) == Jakob; } […] $application = $this->getMock(FluentDOM); $application ->expects($this->any()) ->method(getObject) ->will( $this->returnCallback( array($this, callbackGetObject) ) ); […]
  28. 28. Special tests (cont.)[…]$application = $this->getMock(FluentDOM);$application ->expects($this->any()) ->method(getObject) ->will( $this->onConsecutiveCalls( array($this, callbackGetObject, $this->returnValue(true), $this->returnValue(false), $this->equalTo($expected) ) );[…]
  29. 29. Special tests (cont.) implicit integration testspublic function testGet() { $mock = $this->getMock( myAbstraction ); $mock ->expected( $this->once() ) ->method( method ) ->will( $this->returnValue( return );}
  30. 30. Questions@lapistanolapistano@php.net
  31. 31. Slidesn contact Please comment the talk on joind.in http://joind.in/3518 Slides http://slideshare.net/lapistano Email: lapistano@php.net
  32. 32. PHP5.3 Powerworkshop New features of PHP5.3 Best Pratices using OOP PHPUnit PHPDocumentor
  33. 33. License  This set of slides and the source code included in the download package is licensed under theCreative Commons Attribution-Noncommercial-Share Alike 2.0 Generic License http://creativecommons.org/licenses/by-nc-sa/2.0/deed.en

×