Desarrollo Guiado por Pruebas en PHP: Creación de Clases y Métodos
Clase 16 de 19 • Curso de Programación Orientada a Objetos en PHP
Resumen
¿Cómo llevar una prueba de rojo a verde en el desarrollo guiado por pruebas?
El desarrollo de software a menudo enfrenta el desafío de garantizar que las funcionalidades cumplan con las expectativas del usuario. Adoptar el desarrollo guiado por pruebas o Test-Driven Development (TDD) es una práctica que asegura que cada línea de código esté justificada por pruebas previas. Al comenzar con una prueba que falla (roja) y realizar los cambios necesarios para que pase (verde), podemos mejorar nuestro proceso de desarrollo.
¿Cómo iniciamos la creación de clases?
Inicialmente, hemos identificado que uno de los errores principales al ejecutar el comando es que la clase app\post
no existe. Para rectificar este problema:
- Creamos un directorio llamado
src
, definido en nuestro archivocomposer.json
. - Dentro de este directorio, creamos el archivo
Post.php
para comenzar a desarrollar la clasepost
.
Con esto en mente, es esencial asegurarnos de que la clase esté declarada correctamente y que incluya un espacio de nombres (namespace) adecuado para evitar errores de ejecución.
¿Cuál es el rol de los comentarios y métodos en nuestro código?
Una vez que hemos resuelto el problema de la existencia de la clase post
, encontramos otro obstáculo: la ausencia del método addComment
. Para abordar este problema:
- Creamos un archivo
Comment.php
que contiene la definición de la claseComment
. - En la clase
Post
, implementamos el métodoaddComment
. Este método se asegura de recibir un parámetro que es una instancia de la claseComment
. Esto garantiza que los comentarios añadidos sean válidos y pertenezcan al mismo espacio de nombres.
Este enfoque también implica la creación de una propiedad denominada comments
dentro de la clase Post
, que inicialmente es un arreglo vacío. De esta manera, podemos agregar comentarios y acumularlos adecuadamente.
¿Cómo implementamos el conteo y la obtención de comentarios?
Para expandir la funcionalidad de la clase Post
, incorporamos métodos adicionales que permiten contar y obtener comentarios:
-
Método para contar comentarios:
public function countComments() { return count($this->comments); }
Este método evalúa la cantidad de elementos presentes en la propiedad
comments
. -
Método para obtener comentarios:
public function getComments() { return $this->comments; }
Este método devuelve todos los comentarios almacenados en la propiedad para que puedan ser manipulados externamente.
¿Qué sucede si enviamos un string en lugar de un objeto comment?
En los momentos finales, integramos validaciones adicionales para enfatizar la importancia de trabajar con instancias de objetos y no con tipos de datos básicos como strings. Al ejecutar un test con un string en lugar de la instancia esperada, observamos que el código amablemente avisa de que no es la instancia esperada.
La validación de tipos en la implementación bloquea estos errores, priorizando instancias específicas de nuestras clases. Así, conseguimos proporcionar múltiples niveles de seguridad, tanto a nivel de prueba como a nivel de código.
En el ámbito del desarrollo software, este ciclo de crear pruebas, escribir código a partir de ellas y refactorizar contribuye decididamente a elevar nuestras habilidades de programación a nivel profesional. Las pruebas aseguran que cualquier modificación futura no altere el comportamiento deseado, brindando una base sólida para el crecimiento y mantenimiento del código.