Für euch Unittester da draußen, hier ein Cheat Sheet für den Alltag. Lohnt sich auch so zu lesen, um sich ein paar Anregungen zu holen. Wer kennt schon alle Funktionen auswendig.
Inhaltsverzeichnis
- Assertions / Prüfungen
- Mock Konfiguration
- Mögliche Eventhandler in der Testklasse
- Direkte Manipulation des Testergebnisses
- Testen von Exceptions
- Testen von PHP-Fehlern
- Testen von Textausgaben
- Testfunktion mit verschiedenen Werten (data-provider)
Assertions / Prüfungen
Allgemein
assertThat
assertEmpty, assertNotEmpty
assertGreaterThan, assertGreaterThanOrEqual, assertLessThan, assertLessThanOrEqual
assertInternalType, assertNotInternalType
assertTrue, assertFalse
assertNull, assertNotNull
assertEquals, assertNotEquals, assertSame, assertNotSame
Objekte und Klassen
assertInstanceOf, assertNotInstanceOf
assertAttributeInstanceOf, assertAttributeNotInstanceOf
assertAttributeInternalType, assertAttributeNotInternalType
assertObjectHasAttribute, assertObjectNotHasAttribute
assertClassHasAttribute, assertClassNotHasAttribute
assertClassHasStaticAttribute, assertClassNotHasStaticAttribute
assertAttributeEmpty, assertAttributeNotEmpty
assertAttributeContains, assertAttributeNotContains
assertAttributeContainsOnly, assertAttributeNotContainsOnly
assertAttributeEquals, assertAttributeNotEquals
assertAttributeSame, assertAttributeNotSame
assertAttributeGreaterThan, assertAttributeGreaterThanOrEqual
assertAttributeLessThan, assertAttributeLessThanOrEqual
Arrays
assertArrayHasKey, assertArrayNotHasKey
assertContains, assertNotContains, assertContainsOnly, assertNotContainsOnly
assertCount, assertNotCount
Strings / Zeichenketten
assertRegExp, assertNotRegExp
assertSelectCount, assertSelectEquals, assertSelectRegExp
assertStringStartsWith, assertStringStartsNotWith
assertStringEndsWith, assertStringEndsNotWith
assertStringEqualsFile, assertStringNotEqualsFile
assertStringMatchesFormat, assertStringNotMatchesFormat,
assertStringMatchesFormatFile, assertStringNotMatchesFormatFile
Dateien, XML, HTML
assertFileEquals, assertFileNotEquals
assertFileExists, assertFileNotExists
assertEqualXMLStructure
assertTag, assertNotTag
assertXmlFileEqualsXmlFile, assertXmlFileNotEqualsXmlFile
assertXmlStringEqualsXmlFile, assertXmlStringNotEqualsXmlFile
assertXmlStringEqualsXmlString, assertXmlStringNotEqualsXmlString
Mock Konfiguration
Anzahl der Aufrufe (expects
)
any, never
at
atLeastOnce
exactly, once
Übergebene Parameter (with
)
logicalNot, logicalAnd, logicalOr, logicalXor
anything
arrayHasKey
contains
equalTo, identicalTo
greaterThan, greaterThanOrEqual
lessThan, lessThanOrEqual
isTrue, isFalse, isNull
attribute, attributeEqualTo
hasAttribute, classHasAttribute, classHasStaticAttribute
isInstanceOf, isType
matchesRegularExpression, stringContains
stringStartsWith, stringEndsWith
fileExists
Rückgabewerte (will
)
onConsecutiveCalls
returnArgument
returnCallback
returnValue
throwException
Mögliche Eventhandler in der Testklasse
public static function setUpBeforeClass()
public static function tearDownAfterClass()
protected function setUp()
protected function tearDown()
protected function assertPreConditions()
protected function assertPostConditions()
protected function onNotSuccessfulTest()
Direkte Manipulation des Testergebnisses
fail()
markTestIncomplete()
markTestSkipped()
Testen von Exceptions
Testen von \Exception
ist nicht möglich, da PHPUnit selbst bei fehlgeschlagenen Assertions \PHPUnit_Framework_Exception
wirft.
Mit Annotation
1 2 3 4 |
/** * @expectedException \UnexpectedValueException */ public function testAnException() { /* ... */ } |
Mit Definition im Test selbst
1 2 3 4 5 |
public function testAnException() { $this->setExpectedException('\UnexpectedValueException'); // test } |
Mit try-catch
1 2 3 4 5 6 7 8 9 |
public function testAnException() { try { // test $this->fail('Expected Exception'); } catch (ProjectException $e) { $this->assertEquals(230, $e->getCode()); } } |
Testen von PHP-Fehlern
PHPUnit wandelt alle PHP-Fehler in eine \PHPUnit_Framework_Error
Exception um. Diese kann wie oben gezeigt erwartet und ausgewertet werden.
Testen von Textausgaben
1 2 3 4 5 |
public function testTextOutput() { $this->expectOutputString('foo'); // test } |
Testfunktion mit verschiedenen Werten (data-provider
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
/** * @dataProvider providerForTransformTest * * @param $data * @param $expected */ public function testWithVariableData($data, $expected) { $class = new ClassToTest(); $this->assertEmpty($expected, $class->transform($data)); } public function providerForTransformTest() { return [ [/* Wert für den 1. Parameter */ 'foo', /* Wert für den 2. Parameter */ 'bar'], // Daten für den 1. Testdurchgang ['foo2', 'bar2'], // Daten für den 2. Testdurchgang // ... ]; } |