Continuamos con la serie refactoring PHP legacy code. en el post de hoy empezaremos a hacer test unitarios que serán la base de todos los cambios y refactorizaciones futuras. Extraeremos funcionalidades, pequeñas piezas de código que podremos probar con test unitarios.Aunque parezca que solo son unos simples test, no debemos olvidar que estamos trabajando con código “feo”, sin coding estándar. Como siempre iremos dando pequeños pasos para tropezar.
Test unitarios con PHPUnit
Ya hemos hablado en el blog de test unitarios puedes encontrarlo aquí así que no vamos a dar una introducción a los tests unitarios. Además como ya tenemos composer con phpunit instalado solo tenemos que empezar.
Los test unitarios deben ser independientes
Buscando funciones aisladas
Si el código lo permite (como este caso) es recomendable empezar a escribir test de código que podamos probar. Esto nos será útil para comprender la lógica de funciones pequeñas y para ir cubriendo poco a poco el código a testear.
Analizando nuestros archivos, podemos descartar de momento el método run de GameRunner.php porque no tiene ninguna lógica y aunque podemos probarlo no tiene sentido gastar demasiado tiempo en el todavía. Vamos a por un trabajo más fácil para coger un poco de práctica antes. ¿Recordáis el método isCorrectAnswer() que refactorizamos en el anterior post? Vamos a por él.
Lo primero es centrarnos solo en esta función, por lo que de momento vamos a marcar como skipped el test de GameRunnerTest.php y vamos a crear un test específico para testear la función is isCorrectAnswer, pero tenemos un problema la funcion rand() necesitamos hacer algo para controlarla 😉 Así que lo primero será ir a la documentación y hacer una pequeña prueba ¿que pasa si min y max son iguales?
function testCanFindCorrectAnswer()
{
for ($i = 0; $i < 10; $i++) {
var_dump(rand($i,$i));
}
}
¡Mola! Ya tenemos una manera de forzar números aleatorios como nosotros queramos.
Continúa leyendo «Refactorizando legacy code en PHP Parte 4 – como empezar con test unitarios en un refactoring»