2008-09-25 9 views
5

Quelle est la meilleure façon de tester les entrées $_GET et $_POST dans PHPUnit?Test des entrées de formulaire dans PHPUnit

J'ai une classe qui désinfecte l'entrée et je veux vérifier qu'elle fonctionne correctement lors du traitement de données fausses. Y at-il un moyen facile de configurer les variables de formulaire dans PHPUnit ou devrais-je simplement passer la validation à une classe secondaire/fonctions qui sont alimentées les variables de formulaire afin de les tester indirectement?

Répondre

16

Jetez un oeil à l'idée de Dependency injection. En un mot, vous devez nourrir votre code ce dont il a besoin, par opposition à ce faire les données nécessaires ... Voici un exemple:

exemple sans injection de dépendances

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

sanitize1(); 

exemple avec injection de dépendances

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

sanitize2($_POST); 

Vous voyez la différence? Dans votre test PHPUnit, vous pouvez passer sanitize2() un tableau associatif de votre choix; vous avez injecté la dépendance. Alors que sanitize1() est couplé avec $_POST. $_POST et $_GET sont assoc tableaux de toute façon dans votre code de production, vous pouvez passer $_GET ou $_POST à votre fonction, mais dans vos tests unitaires, vous auriez coder en dur certaines données attendues.

exemple de test unitaire:

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

Merci pour cela - je me suis dit que c'était probablement la meilleure solution. Très bonne réponse aussi! –

+0

Merci phatduckk. Simple mais efficace! :) – nonshatter

Questions connexes