patrones de test, mejorando la arquitectura en PHP

Seguimos la serie de post sobre patrones de testing utilizando PHPUnit. Ya hemos visto muchos patrones y también muchas formas de afrontar los testa cuando tenemos que testear código legacy. Aunque si bien es cierto, la mejor manera de testear este código legacy es apoyarse en el refactor automático de los IDE y en la cautela.

Esta vez vamos ha tratar unos patrones más para poder testear aplicaciones. Así que adelante.

Layer test

Muchas aplicaciones web de hoy en día utilizan una arquitectura en capas, por ejemplo una capa de infraestructura (persistencia de datos), una capa de servicio y una capa de presentación (para manejar el HTML).

Seguir leyendo “patrones de test, mejorando la arquitectura en PHP”

Anuncios

patrones test utilizando PHPUnit

Hace unos días vimos algunos patrones para mejorar los tests con PHPUnit, mejorando los assert y/o fixtures. En esta ocasión traemos una serie de patrones para mejorar nuestros tests en PHP.

Veremos una serie de técnicas sobre como afrontar los tests, haremos ejemplos, si bien es cierto que estos ejemplos serán en PHP, la teoría detrás de estos tests puede aplicarse a Java (JUnit), .NET, Python,…

Parametrized test

De vez en cuando, nos encontramos con que estamos escribiendo pruebas casi idénticas, que solo difieren en unos pocos valores, pero la lógica es esencialmente la misma. En estas situaciones es una buena práctica a la hora de hacer test utilizar el patron test parametrizados (parametrized test).

La idea fundamental es de este patrón reside en que solo hay un método de prueba que encapsula la lógica, con la ayuda de PHPUnit lo que hacemos es proporcionar a ese test distintos conjuntos de parámetros.

Seguir leyendo “patrones test utilizando PHPUnit”

Patrones para mejorar tests con PHP y PHPUnit – TDD

Ya hemos hablado bastantes veces sobre TDD, sobre como instalar PHPUnit, cómo utilizar PHPUnit y Silex para poder hacer Test Driven development, en definitiva ya hemos dado los primeros pasos. Ahora vamos a dar otro pequeño paso, aprenderemos algunos patrones para escribir mejores tests.

Hablaremos sobre buenas maneras de escribir assert, formas distintas de estructurar y construir fixtures y de algunos trucos a la hora de escribir pruebas para legacy code (código legado).

Vamos a aprender estos patrones mediante pequeños ejemplos utilizando PHPUnit, pero podría ser aplicable a cualquier otro lenguaje, ya que todo esto solo es un conjunto de buenas prácticas para hacer tests unitarios.

Patrones para realizar assert con PHPUnit

Los assert son la esencia de los tests, si no comprobamos mediante un assert o similar.
Vamos a ir viendo poco a poco distintos patrones de los más simples a algunos más complejos.

Seguir leyendo “Patrones para mejorar tests con PHP y PHPUnit – TDD”

Haciendo TDD en PHP con Silex y PhpUnit (Parte 1)

Hace ya bastante tiempo que en el blog estamos hablando sobre PhpUnit, TDD e incluso hemos nombrado a Silex, creo que ya va siendo hora de crear un pequeño proyecto en el que aplicar todo esto. Llevo ya unos días trabajando sobre mi cuenta de github (https://github.com/jeslopcru) en un pequeño proyecto PHP donde utilizo Silex, PHP y TDD. Es solo una pequeña prueba de concepto para ver que es posible hacer TDD utilizando Silex y por tanto también podría ser posible hacer TDD utilizando Symfony2.

En este proyecto montaremos todo el entorno utilizando Composer junto PhpUnit y symfony/browser-kit (para poder hacer tests funcionales a los controladores symfony). También utilizaremos monolog para los logs. Así que vamos manos a la obra.

Información acerca del proyecto

Vamos a crear una calculadora con la que podremos hacer operaciones básicas, para utilizarla haremos uso del navegador, es decir, como URL utilizaremos algo así http://www.example.com/add?numberA=2&numberB=3 y la respuesta será la suma de ambos parámetros.
Si, es cierto, en un primer momento no parece un gran proyecto, pero lo importante de esto es que construiremos todo esto utilizando el microframework Silex y trabajando mediante TDD.

Creando el proyecto

Para crear el proyecto lo más cómodo es utilizar una herramienta como virtualhost.sh. Este script permite crear toda la configuración necesaria para crear un crear un site en Apache, mapear la dirección en etc/hosts y configurar el log de apache. Para instalarlo solo tenemos que abrir un terminal y escribir brew install virtualhost.sh

Seguir leyendo “Haciendo TDD en PHP con Silex y PhpUnit (Parte 1)”

PHPUnit y buenas prácticas

Hace ya unas semanas realicé unos post sobre como instalar PHPUnit para empezar con TDD. Hace unos días me llegó desde twitter un post sobre “Ser profesional” (http://plqd.blogspot.com.es/2013/07/ser-profesional.html) En el Pepe Doval cuenta experiencias tratando con personas más o menos profesional. Uno de los puntos clave que cuenta Doval es que el mundo de la programación es muy cambiante, llegan nuevos lenguajes y tecnologías cada día, por ello lo mejor la mejor manera de ser un profesional es aplicar buenas prácticas, desde comentar bien el código, hacer buenos commit, practicar TDD. Por eso llegado a este punto voy a escribir sobre buenas prácticas con PHPUnit.

He de decir que no soy un experto en la materia, esto son solo una serie de recomendaciones extraídas de Internet y que yo intento utilizar en la medida de lo posible, aunque para ser sincero no siempre consigo utilizarlas 😉

Vamos a basarnos en el ejemplo de la cuenta bancaria, es el mismo del post anterior sobre PHPUnit y el ejemplo clave de la documentación de PHPUnit (http://phpunit.de/manual/current/en/index.html)

Sé descriptivo acerca de lo que estás probando

Los test que escribimos deben ser autodescriptivos y con solo un vistazo al código debemos saber que se está probando. Esto puede ser fácil de decir pero bastante difícil de hacer, por ello en PHPUnit están las anotaciones como @Covers.

Seguir leyendo “PHPUnit y buenas prácticas”