Bisher haben wir nur zwei Tests für Array und die eingebaute Funktion sizeof(). Wenn wir mit dem Testen einer großen Anzahl von array_*()-Funktionen beginnen, benötigen wir für jede einzelne einen Test. Wir können jeden von Grund auf neu schreiben. Ein besserer Ansatz besteht jedoch darin, die Testinfrastruktur einmal zu schreiben und dann nur die verschiedenen Teile jedes Tests zu schreiben. PHPUnit ist eine solche Infrastruktur.
Beispiel 5 zeigt, wie die beiden Tests in Beispiel 4 mit PHPUnit neu geschrieben werden.
Beispiel 5. Testen Sie Array und sizeof() mit PHPUnit
<?php
require_once 'PHPUnit2/Framework/TestCase.php';
Klasse ArrayTest erweitert PHPUnit2_Framework_TestCase {
öffentliche Funktion testNewArrayIsEmpty( ) {
//Array-Fixture erstellen.
$fixture = Array( );
// Stellen Sie sicher, dass die Größe des Array-Geräts 0 ist.
$this->assertEquals(0, sizeof($fixture));
}
öffentliche Funktion testArrayContainsAnElement( ) {
//Array-Fixture erstellen.
$fixture = Array( );
// Ein Mitglied zum Array-Fixture hinzufügen.
$fixture[] = 'Element';
//Stellen Sie sicher, dass die Größe des Array-Geräts 1 ist.
$this->assertEquals(1, sizeof($fixture));
}
}
?>
Beispiel 5 zeigt uns die grundlegenden Schritte, um PHPUnit zum Schreiben von Tests zu verwenden:
1. Die Testklasse für die Klasse Class ist ClassTest.
2. ClassTest erbt im Allgemeinen PHPUnit2_Framework_TestCase.
3. Test ist eine öffentliche Methode ohne Parameter und heißt test*.
4. In der Testmethode werden Assertionsfunktionen wie „assertEquals()“ (siehe Tabelle 6) verwendet, um zu bestätigen, ob der tatsächliche Wert mit dem erwarteten Wert übereinstimmt.
Ein Framework wie PHPUnit muss eine Reihe von Problemen lösen, von denen einige scheinbar im Widerspruch zueinander stehen. Tests müssen außerdem die folgenden Bedingungen erfüllen:
Leicht zu erlernen
Tests müssen leicht zu erlernen sein, sonst lernen Entwickler nicht.
Einfach zu entwickeln.
Tests müssen einfach zu entwickeln sein, sonst entwickeln Entwickler nicht.
Einfach zu lesen.
Testcode darf keine externen Beziehungen haben , damit der Test selbst nicht in der Unordnung untergeht.
Einfach durchzuführen
Tests sollten einfach auszuführen sein und die Ergebnisse der Ausführung sollten in einem klaren und eindeutigen Format ausgedrückt werden.
Schnelle Ausführungstests
sollten schnell ausgeführt werden, damit sie tausende Male pro Tag ausgeführt werden können.
Code-
Isolationstests können sich nicht gegenseitig beeinflussen und Änderungen in der Testreihenfolge sollten sich nicht auf die Ergebnisse auswirken.
Zusammensetzbar
Wir sollten in der Lage sein, Tests in beliebiger Kombination auszuführen, was eine Folge der Code-Isolation ist.
Es gibt zwei Hauptkonflikte zwischen diesen Einschränkungen:
Ease of Learning vs. Ease of Development.
Tests erfordern im Allgemeinen nicht die volle Flexibilität der Programmierung. Viele Testtools bieten ihre eigenen Testskriptsprachen. Diese Sprachen verfügen nur über die Mindestfunktionen, die zum Schreiben von Tests erforderlich sind. Da es keinen Lärm gibt, der Ihren Testinhalt beeinträchtigt, sind die schriftlichen Tests einfach zu lesen und zu schreiben. Aber das Erlernen einer neuen Stricktasche und eines neuen Werkzeugsatzes ist immer noch umständlich und leicht verwirrend.
Code-Isolation vs. schnelle Ausführung
Wenn Sie möchten, dass sich die Ergebnisse eines Tests nicht auf einen anderen auswirken, müssen Sie zu Beginn jedes Tests ein vollständiges Thema für den Test erstellen und dann den Status vor der Ausführung wiederherstellen. Das Einrichten des Status dauert jedoch lange (z. B. das Herstellen einer Verbindung zur Datenbank und das Initialisieren eines bekannten Status mit echten Daten).
Die Lösung von PHPUnit für dieses Problem besteht darin, PHP als Testsprache zu verwenden. Manchmal ist PHP mit vollem Funktionsumfang zu leistungsfähig, um kurze, unkomplizierte Tests zu schreiben, aber die von uns eingesetzten Programmierer verfügen bereits über umfassende Erfahrung mit PHP. Da wir zögernde Tester überzeugen müssen, ist es äußerst wichtig, die Hürde für das Schreiben dieser ersten Tests zu senken.