Testen von Formulareingaben in PHPUnit
-
02-07-2019 - |
Frage
Was ist der beste Weg, $_GET
und $_POST
Eingänge in PHPUnit
zu testen?
Ich habe eine Klasse, den Eingang sanitises und will prüfen, ob es korrekt funktioniert, wenn falsche Daten verarbeitet werden. Gibt es eine einfache Möglichkeit, die Formularvariablen in PHPUnit
einzurichten oder sollte ich nur die Validierung an eine sekundäre Klasse / Funktionen abgehen, die die Formularvariablen sie so testen indirekt zugeführt werden?
Lösung
Werfen Sie einen Blick auf die Idee von Dependency Injection . Auf den Punkt gebracht, sollten Sie Ihren Code füttern, was es im Gegensatz zu braucht es die Daten immer es braucht ... Hier ein Beispiel:
Beispiel ohne Dependency Injection
function sanitize1() {
foreach($_POST as $k => $v) {
// code to sanitize $v
}
}
sanitize1();
Beispiel mit Dependency Injection
function sanitize2(array &$formData) {
foreach($formData as $k => $v) {
// code to sanitize $v
}
}
sanitize2($_POST);
Sehen Sie den Unterschied? In Ihrem PHPUnit Test können Sie ein assoziatives Array Ihrer Wahl passieren sanitize2()
; Sie haben die Abhängigkeit injiziert. Wohingegen sanitize1()
mit $_POST
gekoppelt. $_POST
und $_GET
sind Assoc Arrays sowieso so in Ihrem Produktionscode Sie $_GET
oder $_POST
an Ihre Funktion aber in Ihrer Unit-Tests Sie würden hart Code einige erwarteten Daten passieren kann.
Unit-Test Beispiel:
function testSanitize() {
$fakeFormData = array ('bio' => 'hi i\'m arin', 'location' => 'San Francisco');
sanitize($fakeFormData);
// assert something
}