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 ssertions like 'assertEquals()' or
'assertTrue()' 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. It shows you some nice features of PHPUnit and how to use them for your benefit.
Inclusivity Essentials_ Creating Accessible Websites for Nonprofits .pdf
PhpUnit - The most unknown Parts
1. The most unknown parts of
PHPUnit
Bastian Feder Confoo 2011 Montreal
bastian.feder@liip.ch 11th March 2011
2. … 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
3. … on the command line (cont.)
-- stop-on-failure
stops the testrun on the first recognized failure.
-- 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)
4. 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)
5. Assertions (cont.)
assertContains(), assertContainsOnly()
Cameleon within the asserts, handles
Strings ( like strpos() )
Arrays ( like in_array() )
$this->assertContains('baz', 'foobar');
$this->assertContainsOnly('string', array('1', '2', 3));
7. 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
8. Assertions (cont.)
assertObjectHasAttribute(), assertClassHasAttribute()
Overcomes visibilty by using Reflection-API
Testifies the existance of a property,
not its' content
$this->assertObjectHasAttribute(
'myPrivateAttribute', new stdClass() );
$this->assertObjectHasAttribute(
'myPrivateAttribute', 'stdClass' );
9. 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 FluentDOM );
$this->assertAttributeContains(
'ko', 'name', new FluentDOM );
11. Assertions (cont.)
assertSelectEquals(), assertSelectCount()
Assert the presence, absence, or count of elements in a
document.
Uses CSS selectors to select DOMNodes
Handles XML and HTML
$this->assertSelectEquals(
'#myElement', 'myContent', 3, $xml );
$this->assertSelectCount( '#myElement', false, $xml );
14. Inverted Assertions
Mostly every assertion has an inverted sibling.
assertNotContains()
assertNotThat()
assertAttributeNotSame()
…
15. 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 )
25. Slides'n contact
Please comment the talk on joind.in
http://joind.in/2879
http://joind.in/2848
Slides
http://slideshare.net/lapistano
Email:
bastian.feder@liip.ch
26. PHP5.3 Powerworkshop
New features of PHP5.3
Best Pratices using OOP
PHPUnit
PHPDocumentor
27. License
This set of slides and the source code included
in the download package is licensed under the
Creative Commons Attribution-Noncommercial-Share
Alike 2.0 Generic License
http://creativecommons.org/licenses/by-nc-sa/2.0/deed.en