Unit-Tests
Testen in Webprojekten
Auch Webanwendungen müssen getestet werden
- Automatisierte Tests wichtig für einen systematischen Test
- Werkzeuge für
- Unit-Tests
- Tests der Oberfläche
- Performance-Analyse und Profiling
Unit-Tests mit PHPUnit
Für PHP gibt es ein Paket für PHP-Unit-Tests
http://www.phpunit.de
- Entwickeln von Tests
- sehr ähnlich zu JUnit
- Zu jeder zu testenden Klasse wird eine Testklasse geschrieben
- Testklasse erbt vom Framework
- Methoden der Klasse werden aufgerufen und Ergebnisse über asserts mit den Sollergebnissen verglichen
- Durchführung der Tests
- Aufruf der Tests mit
phpunit DATEINAME - Bei Abweichungen erfolgt eine Ausgabe auf der Konsole
Beispiel: Klasse
class ComplexNumber {
private $realAnteil;
private $imaginaerAnteil;
public function __construct($realAnteil, $imaginaerAnteil) {
$this->realAnteil = $realAnteil;
$this->imaginaerAnteil = $imaginaerAnteil;
}
public function add($other) {
return new ComplexNumber($this->realAnteil + $other->realAnteil,
$this->imaginaerAnteil + $other->imaginaerAnteil);
}
...
...
public function multiply($other) {
$r = $this->realAnteil * $other->realAnteil
- $this->imaginaerAnteil * $other->imaginaerAnteil;
$i = $this->realAnteil * $other->imaginaerAnteil
- $this->imaginaerAnteil * $other->realAnteil;
return new ComplexNumber($r, $i);
}
}
Beispiel: Testklasse
require_once 'ComplexNumber.php';
class ComplexNumberTest extends PHPUnit_Framework_TestCase {
public function testAddOfTwoComplexNumbers() {
$a = new ComplexNumber(4, -5);
$b = new ComplexNumber(2, 11);
$this->assertEquals(new ComplexNumber(6, 6), $a->add($b));
}
public function testMultiplicationOfTwoComplexNumbers() {
$a = new ComplexNumber(2, -4);
$b = new ComplexNumber(-3, 5);
echo $this->readAttribute($a, 'realAnteil');
$this->assertEquals(new ComplexNumber(14, 22), $a->multiply($b));
}
}
Beispiel: Testlauf
> phpunit ComplexNumberTest.php
PHPUnit 3.6.11 by Sebastian Bergmann.
Time: 0 seconds, Memory: 2.50Mb
There was 1 failure:
1) ComplexNumberTest::testMultiply
Failed asserting that two objects are equal.
--- Expected
+++ Actual
@@ @@
ComplexNumber Object (
'realAnteil' => 14
- 'imaginaerAnteil' => 22
+ 'imaginaerAnteil' => -2
)
src/ComplexNumberTest.php:21
FAILURES!
Tests: 2, Assertions: 2, Failures: 1.
Wichtige assert-Methoden
| Methode | Aktion |
|---|---|
assertTrue($condition) | Fehler, falls $condition den Wert FALSE hat. |
assertFalse($condition) | Fehler, falls $condition den Wert TRUE hat. |
assertNull($variable) | Fehler, falls $variable nicht den Wert NULL hat. |
assertNotNull($variable) | Fehler, falls $variable den Wert NULL hat. |
assertEquals($exp, $act) | Fehler, falls $exp und $act nicht identisch sind. |
assertNotEquals($exp, $act) | Fehler, falls $exp und $act identisch sind. |
assertContains($needle, array $haystack) | Fehler, falls $needle nicht in $haystack enthalten ist. |
assertNotContains($needle, array $haystack) | Fehler, falls $needle in $haystack enthalten ist. |
PHPUnit: Hilfsfunktionen
Leere Testklasse automatisch anlegen
phpunit-skelgen --test Beispiel.php
liest Beispiel.php ein und erzeugt BeispielTest.php- für jede Methode der Klasse wird ein (leerer) Testfall erzeugt
Zugriff auf private Attribute
$this->readAttribute($object, 'attributName');liefert den Wert des Attributs attributName
Dokumentation von Tests
Namen der Testmethoden werden umformatiert
- Aus
testAddOfTwoComplexNumbers()wird
„Add of two complex numbers“ - HTML-Ausgabe
phpunit --testdox-html ergegnis.html test.php - Bildschirm-Ausgabe
phunit --testdox test.php
> phpunit --testdox ComplexNumberTest.php
PHPUnit 3.6.11 by Sebastian Bergmann.
ComplexNumber
[x] Add of two complex numbers
[x] Multiplication of two complex numbers