sábado, 31 de agosto de 2024

Siguientes pasos - Test Unitarios - ¿Cómo de bueno es ChatGPT para aprender un nuevo lenguaje? IV

Este artículo es el cuarto de una series acerca de  De cómo aprender python con ChatGPT, en el enlace previo, puedes empezar por el principio si quieres.

 

Test Unitarios


¿Puedes crear test unitarios en un nuevo fichero?


Genera el código rápidamente, luego una sección explicando el código y otra sección con el comando para ejecutar los test unitarios.

Me gusta cómo está estructurado el código. Primero, tiene un método setUp para inicializar todo lo necesario antes de correr los tests, incluidos los mocks. Luego, presenta test unitarios para las funciones del código a probar, tanto para casos positivos como negativos, e incluso para el control de excepciones.

Tuve que renombrar algunos archivos para que los nombres coincidieran, pero todo ha funcionado como se esperaba. La mala noticia es que, de los ocho tests generados, uno falla, lo que me lleva a pensar que hay una discrepancia entre el código generado y los tests. Para evitar esto, intenté generar los tests nuevamente, esta vez copiando y pegando el código que iba a ejecutar, para asegurarme de que los tests no se generaran para un código que estaba en la conversación y que no coincidiera exactamente con el que tenía en el editor de texto. Sin embargo, el resultado fue el mismo. Al fin y al cabo, nadie es perfecto, pero si quiero solucionar este error tendré que hacerlo a la antigua usanza: examinando y depurando el código. La dificultad aquí es que yo no he escrito el código, lo que añade una barrera, pero como el objetivo final es aprender el lenguaje de programación, seguro que me será útil.

Lo primero que me llama la atención es que se está importando MagicMock de unittest.mock. Mi primer contacto con mocking frameworks fue en 2005, cuando estaba utilizando Extreme Programming y por extensión TDD. Desde entonces, y viniendo del mundo Java, he visto pasar muchos frameworks para construir mocks. Me pregunto por qué ha elegido MagicMock en particular. En otra época, habría buscado información en Google, investigando alternativas, investigando qué framework es más maduro o aceptado según Google Trends, pero ahora tenemos chatbots para ayudarnos, así que le hago tres preguntas encadenadas para ver cómo responde:


  1. ¿Por qué has elegido unittest.mock y MagicMock como framework para fabricar los mocks?
  2. ¿Hay alternativas? ¿Qué otras opciones hay?
  3. ¿Podrías reescribir los tests con pytest y pytest-mock?

Para la primera pregunta, devuelve una respuesta bastante completa con seis puntos a favor de esta opción.

En la segunda, ofrece seis alternativas, explicando cuáles son los puntos fuertes de cada una. Incluso menciona una, mockito, que ya conocía del mundo Java. La que más me convence es la primera: pytest con pytest-mock. De ahí surge la tercera pregunta; no solo me reescribió el código de los tests, sino también el código que quería testear. Sin embargo, se quedó colgado generando el código de los tests, y tuve que pedirle que lo generara de nuevo. No es la primera vez que me pasa esto, que se quede a mitad de camino; me imagino que es lo que sucede bajo condiciones excepcionales, pero yo esperaría un mensaje de error, al menos para saber que no pudo terminar.

Con pytest, la forma de ejecutar los tests es distinta. Al probarlo, me da un error, así que le pregunto otra vez:

Cuando ejecuto "pytest", me da el error:


pytest : The term 'pytest' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.

¿Sabes cuál es el problema?

 

En esta ocasión, me vuelve a generar dos respuestas, me gusta más la primera, es un poco más directa, y me sugiere ejecutar los test como un comando de python: python -m pytest.

Y ahora si, es capaz de ejecutar los test, las malas noticias es que falla en el mismo punto que con la versión anterior.


No hay comentarios: