Blog de Gonzalo

PRUEBAS TDD

TDD son las siglas de Test Driver Development.TDD y se basa en la idea de realizar pruebas unitarias para el codigo a implementar. Normalmente, primero se programa y luego se realizan las pruebas unitarias, pero TDD establece que primero hay que realizar una prueba y a continuación desarrollar el codigo que la resuelve.
La verdad es que la primera vez que oí ésto me pareció bastante raro, ya que me parecía impensable programar y luego probar, pero cogiendo bien el hábito se puede ajustar más el código a los requisitos.
En PHP existe la opción de realizar pruebas TDD como en otros lenguajes y la verdad es que no es nada complicado y es bastante útil a la hora de programar. Se aconseja tener en carpetas diferentes el código y los test, si se puede seguir la misma estructura en ambos perfecto.
Existe una herramienta bastante útil llamada phpUnit que facilita las cosas.
Lo primero que hay que hacer es descargarlo, que no es nada complicado. Después generar las diferentes pruebas TDD usando los asserts que se usan para estos casos y comprobar que cada funcionalidad está bien programada y no hay errores. Existen diferentes tipos aserciones, no voy a poner todos aquí porque son demasiados.
Para ejecutar phpUnit hay que hacerlo desde la consola con el comando phpunit nombre_clase.php y se mostrará el resultado de la prueba. Los resultados posibles son:
. - Se muestra cuando una prueba es satisfactoria.
F - Se muestra cuando falla una afirmación.
E - Se muestra cuando se produce un error durante la ejecución de la prueba.
S - Se muestra cuando la prueba se ha omitido.
I - Se muestra cuando la prueba está marcada como incompleta.
A continuación se muestra una prueba simple para ver como funciona y como se muestran los errores.
Antes de cada prueba se suele usar el método SetUp para declarar objetos o para hacer algún set que puede ser útil para las pruebas ya que se puede llamar a algún método de un objeto, etc..., del mismo modo despues de cada prueba se suele usar el método tearDown para eliminar dichos objetos, etc...
Ejemplo:


andlt?php 
require_once "PHPUnit/Autoload.php";
//Tenemos en una variable el valor esperado
$expected = 5;
//La funcion suma devuelve el resultado de la suma de dos numeros
$actual = Suma(3,2);
$this->assertEquals($expected, $actual);
?andgt;


En el ejemplo anterior la prueba será correcta y se ha usado la aserción assertEquals pero como ya se ha dicho hay varias y diversar para probar varias casuísticas.

Compartir en twitter