2009-11-29 37 views
26

Me pregunto, ¿cómo prueban ustedes la unidad en CakePHP? ¿Cómo se incorporan las pruebas en los proyectos? ¿Qué partes de un proyecto prueba? ¿Cómo se decide qué partes se someterán a pruebas unitarias? ¿Todavía terminan el trabajo antes de la fecha límite?Pruebas unitarias en CakePHP?

Respuesta

39

Me pregunto, ¿cómo ustedes unidad de prueba en CakePHP? ¿Cómo se puede incorporar pruebas en proyectos?

Generalmente utilizo la configuración más simple utilizada por Cake Core. Configuré un archivo de prueba para cada controlador y modelo. Generalmente, pruebo la salida de helpers/components/behaviors si el código tiene opciones complejas o el helper tiene una salida en gran medida variable. Considero que mi cobertura es de aproximadamente 65-75% y que incluso con un grado tan bajo de cobertura de código con mis pruebas (el 65% de un subconjunto limitado de archivos es bastante débil) detecto o arreglo más errores a través de pruebas que las que encontré y corregido correctamente sin.

¿Qué partes de un proyecto evalúa? ¿Cómo se determina qué piezas llegan a ser unitarias?

siempre que probar todas las funciones del modelo. Búsqueda personalizada, conjuntos de resultados paginados, etc. Los pruebo para lo siguiente. Corrija el número de resultados (de un hallazgo en los datos del dispositivo), resultados correctos (de un hallazgo en los datos del dispositivo), exactitud de los campos devueltos, número de resultados devueltos y un conjunto de datos correcto para cada tipo de búsqueda personalizada. Corregir la paginación si estoy usando conjuntos paginados en cualquier hallazgo, personalizado o de otra manera.

Siempre pruebo las funciones del controlador que no dan como resultado una vista que se está procesando.Como un hábito, tiendo a mover toda la lógica que no está dedicada a los valores de vista vars o elegir una vista para representar a las funciones privadas/protegidas en el controlador o para modelar las llamadas a funciones. Esto me permite probar las acciones sobrantes del controlador (unas con salida de visualización) directamente. Si represento una vista en total, es probable que esas funciones se comporten bien con cualquier problema con que se representa al estar más arriba en la pila de llamadas.

Pruebo los ayudantes para su salida con determinadas opciones establecidas. No siempre cubro todas las permutaciones de la matriz de opciones, pero cuando dos claves diferentes dan como resultado un comportamiento mutuamente excluyente o puedo verificar que los atributos predicables se incluyan en mi marcado como resultado, los pruebo para esos escenarios.

Si un componente toma datos de algún lugar y los manipula, reviso el formato o devuelvo datos sobre las funciones de los componentes también. Lo mismo para los comportamientos.

Si tengo una clase estática utilizada en alguna parte, probaré las funciones de esa clase para obtener resultados de devolución correctos y para generar algunas fallas forzadas o condiciones de error intencional. Particularmente si un error da como resultado una redirección, o datos que se envían por la tubería de alguna forma. Si una falla es silenciosa o devuelve un valor predeterminado, también verifico para asegurarme de que realmente está sucediendo.

¿Ustedes todavía llegan a terminar el trabajo antes de la fecha límite?

El primer plazo de aprobación por aquí es siempre un poco "suave" para tener en cuenta las pruebas y cualquier problema que surja. Me parece que si usa un lápiz simple y antiguo y papel cuadriculado o una pizarra, puede deducir fácilmente un conjunto básico de pruebas incluso antes de escribir cualquier código. Con este enfoque, puede encontrar que un proyecto requiere un 25% más de tiempo por adelantado pero que durante todo el ciclo de vida de la aplicación fácilmente ahorre el 25% que gastó al principio al no tener tantas cuestiones más adelante en la tubería.


edité esto para añadir en algunos enlaces que mirar para ambas técnicas actuales de prueba y como una manera de tener una idea visual de cómo se juntan.

  1. http://bakery.cakephp.org/articles/view/testing-models-with-cakephp-1-2-test-suite
  2. http://book.cakephp.org/view/160/Testing
  3. http://debuggable.com/posts/unit-testing-in-cakephp-part-1---introduction-to-unit-testing:48102610-c5d0-4398-a010-76974834cda3
  4. http://mark-story.com/nodes/view/testing-cakephp-controllers-the-hard-way

Además, tengo que estar de acuerdo y en desacuerdo con los desarrolladores de la torta en pruebas de escritura. Es es una muy buena idea para probar cualquier cosa que desee reutilizar, ya sea un archivo de componente único o un complemento complejo, ya que lo distribuirá y las pruebas mostrarán código de trabajo y son excelentes ejemplos de lo que se puede hacer con un pedazo de código

En cuanto a no probar los controladores porque hay que utilizar los objetos de imitación - eso es sólo una débil excusa para no hacer un poco de trabajo complicado que una vez que se moleste con él se convierte en un poco más fácil cada vez que lo hace y se realmente, realmente reduce la tasa de error y le da un gran aumento en su propia comprensión de su propio código.

+1

Muchas gracias por la increíble respuesta :) – user133127

+1

su bienvenida - No esperaba que esta publicación fuera popular. –

4

Es posible que desee echar un vistazo a this.

no estoy muy familiarizado con CakePHP, pero en general yo uso PHPUnit. Uso Netbeans, que integra PHPUnit bastante bien (no sé si esa es una opción para ti). Es posible ejecutar pruebas unitarias independientemente del marco web que utilice.

lo general probar toda la conectividad de origen de datos (toda la capa de acceso a datos), y aseguran que la persistencia funciona como se esperaba. Además, si tiene alguna lógica comercial específica en su aplicación, pruébelo, para que sepa que realmente funciona. No tengo una larga experiencia en pruebas, pero supongo que otros sugieren que evalúes tus puntos de vista. Personalmente, uso F5 en el navegador para eso, jeje :). Cuando se trata de la funcionalidad AJAX, pruebo cada bit de la misma (que la solicitud hace lo suyo y/o recupera el resultado deseado).

cuanto a tiempo/plazos, lo único que es seguro es que su proyecto se beneficiará de la prueba. La probabilidad de superar la fecha límite es mucho mayor cuando no se utiliza alguna forma de prueba para garantizar que los bloques de construcción de su aplicación funcionen como usted lo desee. Digamos que su aplicación crece más (lo que en la mayoría de los casos lo hace), no tiene ninguna prueba de unidad y su aplicación falla. ¿Cómo sabe dónde depurar y cuánto tiempo más usaría buscando el problema? Lo más importante de entender es que asegurar que pequeños códigos funcionen es realmente importante cuando obtienes muchas de esas piezas pequeñas.

El tiempo dedicado a escribir pruebas pueden parecer improductivo, ya que no conduce directamente a la funcionalidad, pero sí juega un papel muy importante en el tiempo. Míralo como una forma de seguro.