2009-12-20 17 views
7

Estoy empezando a trabajar con PHPUnit con Kohana. Mi aplicación tiene muchos controladores que simplemente toman datos de alguna forma, validan e insertan/actualizan/eliminan en/-/de la base de datos. ¿Cómo debería escribir un caso de prueba para eso?

Sé que si quiero probar una función escribo la función del proveedor de datos y simplemente comparo el valor devuelto con el esperado. Pero mis datos de entrada (datos de formularios) se pasan en la variable $_POST. ¿Cómo debería probar esto? Y después de eso, ¿debería verificar si los datos insertados están realmente en la base de datos? Por favor, dame algunas pautas para ese tipo de pruebas o enlaces a algunos ejemplos/tutoriales. Gracias.

Respuesta

16

En primer lugar, si está probando desde la recepción de los datos POST a los valores de comprobación en la base de datos, ya no se trata de pruebas unitarias: no está probando un componente aislado de los demás, pero sí probando la integración de esos componentes juntos.

que hace las cosas más difíciles de la prueba:

  • tiene que proporcionar datos de manera más duras: no sólo como parámetros a un método, pero como parámetros a toda su aplicación (que significa forja datos POST, aquí , por ejemplo)
  • que tener más cosas para comprobar: no sólo el valor de retorno de un método, o si se produjo una excepción
  • que tener varias cosas diferentes y tal vez no relacionados que pueden causar un fallo (problema en la Cierto código PHP, problema en la base de datos , el servidor de base de datos no está disponible, ...), lo que hará que las fallas sean más difíciles de rastrear para encontrar su causa.


Tenga en cuenta que yo no he dicho ese tipo de pruebas de "integración" no es útil, por cierto ;-)


Sin embargo, la creación de la matriz $_POST es bastante simple: no se trata de leer -solo, y puedes guardar lo que quieras en él.

Por lo tanto, al comienzo de su caso de prueba, nada le impide inyectar los datos que necesita en él.

+0

gracias. Información útil. –

+0

@PascalMARTIN ¿Qué pasa con la prueba de carga de archivos con 'phpunit'? – Eugene

2

Lo que dijo Pascal. Además, tenga en cuenta que hay herramientas específicamente para probar la interacción en el nivel de http/navegador. Puede usar los casos de prueba web de SimpleTest (utiliza un navegador emulado/programable). Si prefiere PhpUnit, creo que puede usar fácilmente el navegador SimpleTest desde PhpUnit. De lo contrario, existe el Selenium IDE más pesado, para el cual PhpUnit tiene integración.

0

Estoy de acuerdo con Pascal en que $ _POST array no es una matriz de solo lectura y puede manipularlo según sea necesario. También depende de su marco, ZendFramework proporciona la flexiblility freat para manipular las variables como en el ejemplo en el enlace

http://xebee.xebia.in/2010/02/05/test-driven-development-with-zend-framework-and-phpunit/comment-page-1/#comment-3431

Pero aquí se suelta la ventaja de utilizar de PHPUnit en función integrada como (afirmaciones, dataprovider, etc.) Pero en la mayoría de nuestro caso usamos matrices globales $ _POST, $ _GET, o $ _REQUEST y cuando vemos ejemplos de PHPUnit, buscamos en google "Cómo establecer variables POST en PHPUnit" Como PHPUnit no muestra MVC caso de prueba (aunque es un poco de alimentación con cuchara) Necesitamos obtener la instancia de nuestro marco y luego podemos jugar con nuestro marco trabajo y PHPUnit También su manera de probar será la manera de otra manera diferente

0

Bien, lo único que tiene que hacer es establecer la publicación var de esta manera.

$ this-> reques -> setMethod ('post') -> setPost (array ( 'param1' => 'valor1', 'param2' => 'valor2' ));

espero que funcione para usted

Mantener la sonrisa Kdecom

Cuestiones relacionadas