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?

War es hilfreich?

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
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top