The document discusses various features and capabilities of PHPUnit for testing PHP code. It covers command line options for PHPUnit like filters and coverage reports. It also covers different types of assertions for validating test expectations, using annotations to organize tests, and special tests for things like exceptions. The document aims to explain some of the more advanced but lesser known aspects of using PHPUnit for testing.
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Php unit the-mostunknownparts
1. The most unknown parts of PHPUnit
Bastian Feder
lapistano@php.net 19th September 2010
2. Agenda
● PHPUnit on the command line
● Assertions
● Annotations
● Special tests
3. … on the command line
● -- testdox[-(html|text)]
generates a especially styled test report.
● -- filter <pattern>
filters which testsuite to run.
$ phpunit --filter Handler --testdox .
PHPUnit 3.4.15 by Sebastian Bergmann.
FluentDOMCore
[x] Get handler
FluentDOMHandler
[x] Insert nodes after
[x] Insert nodes before
[x] Append children
[x] Insert children before
4. … on the command line (continiued)
● -- 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)
5. 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)
6. Assertions (continiued)
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));
8. Assertions (continiued)
$ 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
9. Assertions (continiued)
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' );
10. Assertions (continiued)
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 );
12. Assertions (continiued)
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 );
15. Inverted Assertions
Mostly every assertion has an inverted sibling.
● assertNotContains()
● assertNotThat()
● assertAttributeNotSame()
● […]
16. 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/1901
● Slides
http://slideshare.net/lapistano
● Email:
lapistano@php.net
26. 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