Pruebas Automatizadas con PHP Unit y Composer

Clase 7 de 16Curso de Manejo de Datos en PHP

Resumen

¿Cómo se estructura un proyecto en PHP con Composer?

Para emprender un proyecto en PHP con seguridad y profesionalismo, la estructura del proyecto es una piedra angular. Composer se convierte aquí en nuestro aliado, facilitando la incorporación de componentes de terceros y asegurando una gestión eficaz de las dependencias.

El proceso comienza con la organización adecuada de carpetas y archivos. Se destaca la carpeta "vendor", crucial para los archivos de Composer y PHPUnit. La ejecución correcta de comandos a través de los directorios de PHPUnit asegura que tengamos un entorno de pruebas robusto, fundamental para trabajar sobre proyectos reales y no sobre archivos sueltos como "index.php".

¿Por qué es esencial crear tests en PHP?

La creación de tests en PHP no se trata solo de complicarnos la vida con más código; es, de hecho, una práctica vital para asegurar la calidad y funcionalidad del software a largo plazo. Los tests permiten validar que las funcionalidades, como la verificación de correos electrónicos a través de nuestro método "email" en la clase de validación, realmente cumplen con los estándares deseados incluso antes de ser utilizadas en un entorno de producción.

¿Cómo nombrar y estructurar los tests?

El estándar de PHP exige que los archivos y métodos de test lleven la palabra "test" al final o al inicio de su nombre, respectivamente:

  • Los archivos terminan en "Test": ValidacionTest.php.
  • Los métodos comienzan con "test": testEmailValidacion().

Esto asegura que PHPUnit reconozca los tests y los ejecute correctamente.

¿Cuál es el flujo para utilizar estos tests?

Una vez que hemos escrito y ejecutado nuestros tests con éxito, podemos integrar nuestros componentes en un archivo index sin preocuparse de errores imprevistos. La estructura propuesta asegura que el método funciona de manera aislada, y los tests nos garantizan que aceptará correos electrónicos válidos y rechazará los incorrectos.

require 'vendor/autoload.php'; // Cargamos el autoloader de Composer

// Validar email con la clase Validacion
$emailValido = (new Validacion)->email("ejemplo@correo.com");
echo $emailValido ? 'Email válido' : 'Email inválido';

¿Cómo extender las pruebas para otras validaciones?

Además del correo electrónico, el sistema necesita validar otros datos cruciales como URLs o contraseñas. La metodología es similar: se crea un método de test, se verifica el comportamiento esperado y posteriormente se desarrolla el método necesario en la clase de validación para que pase el test.

Ejemplo de validación de URLs

Aquí mostramos cómo se implementa una validación para URLs, utilizando métodos propios de PHP, como FILTER_VALIDATE_URL.

// Método en Validacion para validar URL
public function url($url)
{
    return filter_var($url, FILTER_VALIDATE_URL) !== false;
}

// Test para validar una URL
public function testValidarURL()
{
    $validacion = new Validacion();
    $this->assertTrue($validacion->url("https://platzi.com"));
    $this->assertFalse($validacion->url("no es una url válida"));
}

Al implementar estos tests, aumentamos la fiabilidad de nuestro sistema. Cada método y funcionalidad queda respaldado por pruebas automatizadas que nos informan de errores antes siquiera de cargar la aplicación en un navegador.

¿Cómo asegurarte de que tu sistema sigue funcionando al añadir nuevas funcionalidades?

Al trabajar en proyectos grandes, como lo sería Platzi.com, es crucial no probar cada nueva funcionalidad en un navegador porque podría quebrar otras partes del sistema inadvertidamente. En vez, al integrar tests unitarios, garantizas que el resto del sistema sigue operativo. Este proceso automatiza la validación, ahorrando tiempo y reduciendo riesgos.

Al implementar prácticas de testeo desde el inicio, se fortalece la estructura del proyecto y permite la expansión con confianza. No olvides, te animo a aceptar el reto de validar una contraseña utilizando expresiones regulares, y compartir tu progreso en los comentarios. ¡Sigue aprendiendo y te veo en la próxima clase!