2008-09-25 13 views
5

¿Cuál es la mejor manera de probar las entradas $_GET y $_POST en PHPUnit?Entradas de formulario de prueba en PHPUnit

Tengo una clase que desinfecta la entrada y quiero verificar que funcione correctamente al procesar datos falsos. ¿Hay una manera fácil de configurar las variables de forma en PHPUnit o debería pasar la validación a una clase/funciones secundarias que se alimentan con las variables de forma, así que pruébelas indirectamente?

Respuesta

16

Eche un vistazo a la idea de Dependency injection. En pocas palabras se debe alimentar a su código de lo que necesita Frente a ello obtener los datos que necesita ... He aquí un ejemplo:

ejemplo, sin la inyección de dependencias

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

sanitize1(); 

ejemplo, con la inyección de dependencias

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

sanitize2($_POST); 

Ver la diferencia? En su prueba PHPUnit puede pasar sanitize2() una matriz asociativa de su elección; has inyectado la dependencia. Mientras que sanitize1() se combina con $_POST. $_POST y $_GET son matrices de asociación de todos modos, así que en su código de producción puede pasar $_GET o $_POST a su función, pero en las pruebas de su unidad codificaría algunos datos esperados.

Unidad ejemplo de prueba:

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

Gracias por que - pensé que era probablemente la mejor solución. ¡Muy buena respuesta también! –

+0

Gracias phatduckk. Simple pero efectivo! :) – nonshatter

Cuestiones relacionadas