2008-09-25 27 views
5

Jaki jest najlepszy sposób testowania wejść $_GET i $_POST w PHPUnit?Testowanie danych wejściowych w PHPUnit

Mam klasę, która odkaża dane wejściowe i chcę sprawdzić, czy działa poprawnie podczas przetwarzania fałszywych danych. Czy istnieje prosty sposób na ustawienie zmiennych formularza w PHPUnit, czy powinienem po prostu przekazać walidację do drugiej klasy/funkcji, które są zasilane zmiennymi formularza, więc przetestuj je pośrednio?

Odpowiedz

16

Spójrz na pomysł Dependency injection. W skrócie należy karmić swój kod to, czego potrzebuje w przeciwieństwie do niego coraz dane, które musi ... Oto przykład:

przykład bez Dependency Injection

function sanitize1() { 
    foreach($_POST as $k => $v) { 
    // code to sanitize $v 
    } 
} 

sanitize1(); 

Przykład z Dependency Injection

function sanitize2(array &$formData) { 
    foreach($formData as $k => $v) { 
    // code to sanitize $v 
    } 
} 

sanitize2($_POST); 

Widzisz różnicę? W twoim teście PHPUnit możesz przekazać sanitize2() tablicę asocjacyjną do wyboru; wstrzyknęłaś tę zależność. Podczas gdy sanitize1() jest połączony z $_POST. $_POST i $_GET to tablice asocjacyjne, więc w swoim kodzie produkcyjnym możesz przekazać $_GET lub $_POST do swojej funkcji, ale w twoich testach jednostkowych zakodowałeś jakieś oczekiwane dane.

Jednostka Przykład testowy:

function testSanitize() { 
    $fakeFormData = array ('bio' => 'hi i\'m arin', 'location' => 'San Francisco'); 
    sanitize($fakeFormData); 
    // assert something 
} 
+1

Dzięki za to - Pomyślałem, że był chyba najlepszym rozwiązaniem. Bardzo dobra odpowiedź też! –

+0

Dzięki phatduckk. Proste ale efektywne! :) – nonshatter

Powiązane problemy