Unlimited WordPress themes, graphics, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. TDD
Code

Desarrollo basado en pruebas con Laravel & Doctrine

Difficulty:AdvancedLength:MediumLanguages:

Spanish (Español) translation by Elías Nicolás (you can also view the original English article)

Como desarrollador de PHP, puede utilizar la técnica de desarrollo controlado por pruebas (TDD) para desarrollar su software mediante pruebas de escritura. Típicamente, TDD dividirá cada tarea del desarrollo en unidades individuales. A continuación, se escribe una prueba para asegurarse de que la unidad se comporta como se esperaba.

Cada proyecto que utiliza el desarrollo impulsado por pruebas sigue tres pasos sencillos repetidamente:

  • Escriba una prueba para el siguiente bit de funcionalidad que desea agregar.
  • Escriba el código funcional hasta que pase la prueba.
  • Refactorizar el código nuevo y viejo para hacerlo bien estructurado.

Continúe haciendo un ciclo a través de estos tres pasos, una prueba a la vez, aumentando la funcionalidad del sistema. Las pruebas le ayudarán a refactorizar, lo que le permite mejorar su diseño con el tiempo y hace que algunos problemas de diseño sean más obvios.

Las pruebas que contienen pequeños componentes individuales se denominan pruebas unitarias. Si bien las pruebas de unidad pueden realizarse independientemente, si prueba algunos de los componentes cuando están integrados con otros componentes, está realizando pruebas de integración. El tercer tipo de prueba es trozos de prueba. Los stubs de prueba le permiten probar su código sin tener que realizar llamadas reales a una base de datos.

Por qué TDD funciona

Hoy en día, como usted puede utilizar la sintaxis moderna del IDE de PHP, la regeneración no es una gran cosa. Uno de los aspectos importantes de su desarrollo es asegurarse de que el código hace lo que usted espera que haga. Como el software es complicado (diferentes componentes integrados entre sí), sería difícil que todas nuestras expectativas se hicieran realidad. Especialmente al final del proyecto, debido a su desarrollo, el proyecto se volverá más complejo, y por lo tanto más difícil de depurar y probar.

TDD verifica que el código hace lo que usted espera que haga. Si algo sale mal, sólo hay unas pocas líneas de código para volver a comprobar. Los errores son fáciles de encontrar y corregir. En TDD, la prueba se centra en el comportamiento, no en la implementación. TDD proporciona código probado que ha sido probado, diseñado y codificado.

PHPUnit & Laravel

PHPUnit es el estándar de facto para probar unidades PHP. Es esencialmente un framework para escribir pruebas y proporcionar las herramientas que necesitará para ejecutar pruebas y analizar los resultados. PHPUnit deriva su estructura y funcionalidad de SUnit de Kent Beck.

Hay varias afirmaciones diferentes que pueden ayudarle a probar los resultados de todo tipo de llamadas en sus aplicaciones. A veces tienes que ser un poco más creativo para probar una pieza más compleja de funcionalidad, pero las aseveraciones proporcionadas por PHPUnit cubren la mayoría de los casos que querrías probar. Aquí está una lista de algunas de las más comunes que se encontrará usando en sus pruebas:

  • AssertTrue: Comprueba la entrada para verificar que es igual a verdadero.
  • AssertFalse: Comprueba la entrada para verificar que es igual a valor falso.
  • AssertEquals: Comprueba el resultado en contra de otra entrada para una coincidencia.
  • AssertArrayHasKey(): informa de un error si la array no tiene la clave.
  • AssertGreaterThan: Comprueba el resultado para ver si es mayor que un valor.
  • AssertContains: Comprueba que la entrada contiene cierto valor.
  • AssertType: Comprueba que una variable es de cierto tipo.
  • AssertNull: Comprueba que una variable es null.
  • AssertFileExists: Comprueba que existe un archivo.
  • AssertRegExp: Comprueba la entrada con una expresión regular.

De forma predeterminada, PHPUnit 4.0 se instala en Laravel y puede ejecutar el siguiente comando para actualizarlo:

El archivo phpunit.xml del directorio raíz de Laravel le permitirá hacer algunas configuraciones. En este caso, si desea anular la configuración predeterminada, puede editar el archivo:

Como se ve en el código anterior, he añadido la configuración de la base de datos de muestra (no utilizada en el artículo).

¿Qué es Doctrine ORM?

Doctrine es un ORM que implementa el patrón de asignación de datos y le permite hacer una separación clara de las reglas de negocio de la aplicación de la capa de persistencia de la base de datos. Para configurar Doctrine, hay un puente para permitir que coincida con la configuración existente de Laravel 5. Para instalar Doctrine 2 dentro de nuestro proyecto Laravel, ejecutamos el siguiente comando:

Como de costumbre, el paquete se debe agregar a la app/config.php, como el proveedor de servicios:

El alias también debe configurarse:

Finalmente, publicamos la configuración del paquete con:

Cómo probar los repositorios de Doctrine

Antes de cualquier otra cosa, usted debe saber sobre los fixtures. Fixtures se utilizan para cargar un conjunto controlado de datos en una base de datos, que necesitamos para las pruebas. Afortunadamente, Doctrine 2 tiene una biblioteca para ayudarle a escribir fixtures para el Doctrine ORM.

Para instalar el paquete de accesorios en nuestra aplicación Laravel, necesitamos ejecutar el siguiente comando:

Vamos a crear nuestro dispositivo en tests/Fixtures.php:

Como puedes ver, tu clase de dispositivo debe implementar FixtureInterface y debe tener el método load (ObjectManager $manager). Los fixtures de Doctrine2 son clases de PHP donde puedes crear objetos y persistirlos en la base de datos. Para autoload nuestras instalaciones en Laravel, necesitamos modificar composer.json en nuestra raíz de Laravel:

Entonces ejecuta:

Vamos a crear nuestro archivo de prueba en el directorio de pruebas DoctrineTest.php.

En el método setUp(), instanciar el ORMExecutor y el cargador. También cargamos la clase Fixtures que acabamos de implementar.

No olvide que la anotación /** @test */ es muy importante, y sin esto el phpunit devolverá un error No tests found in class.

Para comenzar a probar en la raíz de nuestro proyecto, ejecute el comando:

El resultado sería:

Si desea compartir objetos entre dispositivos, es posible agregar fácilmente una referencia a ese objeto por nombre y posteriormente referenciarlo para formar una relación. Aquí hay un ejemplo:

Y el fixture Comment:

Con dos métodos de getReference() y setReference(), puede compartir objetos entre dispositivos.

Si el orden de fixtures es importante para usted, puede ordenarlos fácilmente con el método getOrder en sus fixtures de la siguiente manera:

Observe que el orden es relevante para la clase Loader.

Una de las cosas importantes acerca de los accesorios es su capacidad para resolver problemas de dependencia. La única cosa que usted necesita agregar es un método en su accesorio como hice abajo:

Conclusion

Esta es sólo una descripción de Desarrollo de prueba con Laravel 5 y PHPUnit. Al probar los repositorios, es inevitable que va a usar la base de datos. En este caso, los fixtures de Doctrine son importantes.

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.