Desarrollo Guiado por Pruebas en PHP: Creación de Clases y Métodos

Clase 16 de 19Curso 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:

  1. Creamos un directorio llamado src, definido en nuestro archivo composer.json.
  2. Dentro de este directorio, creamos el archivo Post.php para comenzar a desarrollar la clase post.

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 clase Comment.
  • En la clase Post, implementamos el método addComment. Este método se asegura de recibir un parámetro que es una instancia de la clase Comment. 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:

  1. 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.

  2. 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.