-
Notifications
You must be signed in to change notification settings - Fork 0
PHP Unit
Genauso wie bei Rexstan müssen bei PHP Unit Abhängigkeiten hinterlegt werden.
Danach ist der Workflow für eigene Tests vorbereitet. In .tools/bootstrap.php sind Variablen für PHPUnit festgelegt. In
phpunit.xml.dist sind die Regeln für PHPUnit definiert.
In der Composer.json ist ein Script unit-test hinterlegt, das die Tests ausführt. Es werden automatisch alle Tests
ausgeführt die im Ordner tests/unitliegen und mit _test.php enden.
Auch PHPUnit kann lokal ausgeführt werden. Wie bei PHP CS Fixer müssen einmalig
Composer und die benötigten Packages installiert werden.
Danach können die Tests über die Konsole mit composer unit-test ausgeführt werden.
Mit einem Unit Test kann man eigene PHP Klassen automatisiert Prüfen lassen und damit festlegen, ob die Klasse auch nach Änderungen wie gewünscht funktioniert.
- Im AddOn im Ordner
tests/uniteine neue Datei mit einem aussagekräftigen Namen anlegen. Der Name muss mit_test.phpenden. (Empfehlung:addonname_test.php) - Eine Testklasse für die zu prüfende Klasse anlegen. Die Klasse muss mit
TESTenden und erweitert die KlasseTestCase - Für jeden Test der Klasse eine Funktion anlegen, die mit
testbeginnt. (Empfehlung:testFunktionName()) - In der Funktion wird dann definiert, was die Testklasse tun soll.
- Abschließend wird das Ergebnis (zum Beispiel mit einer Assert Funktion) überprüft.
TestCaseliefert etliche Assert Funktionen. Man kann auf true oder false prüfen, ob ein Ordner oder eine Datei existiert, zwei identische Werte vergleichen und noch vieles mehr (Dokumentation).
Langfristig sollte das Ziel sein, für jede Klasse und jede Funktion entsprechende Tests zu schreiben. Da dass jedoch viel Fleißarbeit ist, ist es sinnvoll, zunächst nur die wichtigsten Funktionen zu testen und ggf. neue Erweiterungen mit Tests zu versehen.
Hier wird die Ausgabe der eigenen Funktion mit einem erwarteten Wert abgeglichen.
class meineKlasseTEST extends TestCase {
public function testFunktionName() {
$actual = meineKlasse::funktionName();
$expected = 'Erwarteter Wert';
static::assertEquals($expected, $actual);
}Dieser Test ist aus dem Redaxo Core. Hier wird addCssFile aus der Klasse rex_view getestet. Es wird geprüft, ob die Datei am Ende der Liste der CSS Dateien auftaucht. Außerdem wird geprüft, ob eine CSS Datei mit einem definierten Key auch wieder mit diesem Key aufrufbar ist.
class meineKlasseTEST extends TestCase {
public function testAddGetCss(): void
{
rex_view::addCssFile('my.css');
$files = rex_view::getCssFiles()['all'];
static::assertTrue('my.css' == end($files));
rex_view::addCssFile('print.css', 'print');
$files = rex_view::getCssFiles()['print'];
static::assertTrue('print.css' == end($files));
}
}