Monthly Archives: julio, 2015

PHPUnit en Prestashop

PHPUnit en Prestashop

PHPUnit es una potente herramienta para garantizar que nuestro código es estable a través de tests unitarios.Hoy os mostraré cómo utilizar PHPUnit en Prestashop con las clases que vienen incorporadas en su core, ya sea, por ejemplo, para probar nuestros overrides de las clases o controladores, o para probar que nuestros módulos son estables a medida que los vamos desarrollando.

Tened en cuenta que la versión mínima para poder trabajar con PHPUnit en Prestashop tiene que ser la 1.6.0.1, que fue desde la que se incluyeron estas clases, y por si no fuese obvio, tened instalado PHPUnit en nuestras máquinas,podéis ver las instrucciones de instalación aquí (en inglés).

Estructura de directorios para trabajar con PHPUnit en Prestashop

La carpeta con la que trabajaremos con los tests unitarios será la carpeta /tests en esta captura dejo la estructura que tienen los directorios de la versión 1..6.0.14.

 

Estructura de directorios para utilizar PHPUnit en Prestashop

Estructura de directorios para utilizar PHPUnit en Prestashop

Veamos por encima cual es la funcionalidad de los principales directorios y ficheros de esta clase:

  • Classes: aquí están las clases creadas por Prestashop para facilitarnos las tareas de tests unitarios que extienden de la clase de PHPUnit PHPUnit_Framework_TestCase.Para realizar tests unitarios de componentes que creemos de Prestashop, deberemos utilizar las clases aquí contenidas.
  • Config: en este directorio, están los ficheros de configuración con los que lanzaremos los tests unitarios.
  • Unit: aquí encontraremos las distintas carpetas en las que dejaremos nuestros ficheros de test.Un aspecto a tener en cuenta al crear los ficheros de tests unitarios, debemos respetar la misma estructura de directorios y nomenclatura que tenemos en Prestashop.Tened en cuenta que las carpetas que están aquí dentro son las equivalentes al core de prestashop, por lo que serán sobre las que podremos realizar los tests.

Ficheros de Prestashop para trabajar con PHPUnit

A continuación, comentaremos la funcionalidad de los principales ficheros para trabajar con PHPUnit en Prestashop:

  • bootstrap.php: Aquí está la configuración mínima de Prestashop para poder cargar las funcionalidades básicas y así poder realizar los tests.Esta clase debemos incluirla en el parámetro con el mismo nombre al lanzar nuestros tests con PHPUnit(el parámetro bootstrap de PHPUnit).
  • classes/PrestaShopPHPUnit.php: esta es la clase base que extiende de la clase PHPUnit_Framework_TestCase y podemos utilizarla en las tanto en las clases y controladores del core de Prestashop, como en los overrides de estos mismos.A continuación, os hago una breve descripción de los métodos que trae esta clase:

    • invoke: con este método podremos ejecutar métodos que no sean visible de alguna de las clases que queramos testear(privados o protegidos).
    • getProperty: este método sirve para que podamos obtener valores de variables de la clase que le pasemos por parámetro aunque dichas variables sean privadas o protegidas.
    • setProperty: este método sirve para que podamos obtener valores de variables de la clase que le pasemos por parámetro aunque dichas variables sean privadas o protegidas.
  • classes/ModulePrestaShopPHPUnit.php: esta clase extiende de PrestaShopPHPUnit y contiene tres métodos que nos ayudaran a hacer pruebas del módulo que queramos testear:
    • setUp: aquí esta la configuración que se ejecutará al inicio de todos los tests.En este caso, se asigna un employee al Context con perfil de administrador.
    • testInstall: este método testea que el módulo a testear se puede instalar correctamente.
    • testUninstall: este método testea que el módulo se puede desinstalar correctamente.

Configuración del fichero phpunit.xml

Para poner el fichero de configuración phpunit.xml, os recomiendo que lo dejéis a la altura del directorio /tests .Si os interesa ejecutar solamente los tests que hayáis realizado vosotros, os pongo un ejemplo fichero de configuración phpunit.xml y los comento punto por punto:

  •  bootstrap=’bootstrap.php’: aquí pondremos la ruta al fichero bootstrap.php desde el que carga la configuración básica de Prestashop
  • testsuite name=’My_tests’: declararemos este tag para que se ejecuten solamente los tests que nos interesen a nosotros ya que si no declaramos un test suite, se ejecutarán todos los tests que contiene la carpeta /tests/unit y la ejecución de los tests tardará mucho tiempo si en realidad, tan solo queremos que ejecutar sobre los que estamos realizando cambios.
  • directory: este tag contiene el directorio el cual contiene los tests que queremos ejecutar.Declara este tag tantas veces como sea necesario para añadir los  directorios de tests que nos interese ejecutar.

Ejemplo de funcionamiento de PHPUnit en Prestashop

Cogiendo el ejemplo del fichero xml de lanzamiento de PHPUnit comentado anteriormente, vamos a hacer una prueba simple sobre el módulo blockuserinfo. Para empezar, vamos a la carpeta /tests/unit/modules/blockuserinfo y vamos a abrir el fichero blockuserinfo.php.

Como prueba simple, vamos a testear que la variable name del módulo es la que debería ser (blockuserinfo). Vamos a insertar el siguiente método en la clase.

 

Vamos a ejecutar la PHPUnit en Prestashop desde la linea de comandos.Nos ponemos a la altura del directorio /tests de la instalación de Prestashop y ejecutamos lo siguiente:

El resultado que obtendremos , será algo parecido a esto:

Resultado de la ejecución de PHPUnit en Prestashop

Resultado de la ejecución de PHPUnit en Prestashop

 

Yo he ejecutado el comando en Ubuntu, pero es igualmente válido en Windows o Mac.

Vemos que se han ejecutado 3 tests, es decir , el que hemos definido nosotros, más los dos que incluía la clase ModulePrestaShopPHPUnit para testar la instalación(podéis comprobarlo en la captura, ya que cada test es un punto que aparece en el resultado de la ejecución). Como podéis ver, los tests se han ejecutado correctamente.

Os animo, a que empecéis a utilizar PHPUnit en vuestros desarrollos de Prestashop, pues son muy útiles y a la larga, aunque inicialmente os consuma más tiempo dejar vuestro desarrollo bien cubierto con tests, a la larga veréis el tiempo que ahorráis en el mantenimiento de este módulo.

1 Star2 Stars3 Stars4 Stars5 Stars (1 votos, media: 5,00 de 5)
Loading...

Copyright © 2017. Powered by WordPress & Romangie Theme.