Open eisenheimjelid opened 3 years ago
Gracias por el aporte @eisenheimjelid la utilidad de pedir un número no es sencilla, la lógica es la siguiente:
q
si es necesario.Lo que me gustaría probar es:
q
se cierre el programa.Me parece que el escenario complicado es el segundo.
@eisenheimjelid Por qué fue necesario agregar el dot
al inicio del script a importar?
.number_utils
El error esta ahí ModuleNotFoundError: No module named 'number_utils'
como no lo encuentra, lo agregué.
La forma en que importa las referencias python es por medio de las carpetas en el sistema de archivos, yo uso Linux, y es más estricto con ese tipo de cosas.
Referencia:
Bajé el código y solo le tuve que hacer un cambio en
src/input_utils.py
:from .number_utils import is_float
en lugar defrom number_utils import is_float
Esto porque me marcaba este error:
Luego, ejecutando el siguiente comando
python3 -m unittest tests/test_input_utils.py
me responde lo siguiente:Yo veo que funciona bien tu test input, solo quité la anotación y lo hice directo. Pero cuando le pongo una letra en lugar de un número, se queda en un ciclo infinito. Yo siempre recomiendo usar
try ... except ...
para tener un mejor control de excepciones, en lugar delwhile True
que estas usando, porque aunque la experiencia del usuario puede ser mejor dado que el programa no avanza a menos de el usuario ingrese un valor correcto, ya no es tan amigable con las pruebas. Yo lo programaría así:De esa forma, cuando ejecuto la prueba no se queda en un ciclo infinito cuando meten una letra en lugar de un número y puedes hacer más robusta tu prueba al considerar casos de errores controlados:
Aunque ya para concluir, lo más importante es primero preguntar ¿qué quieres probar? es conveniente hacer pruebas separadas, lógica e interacción con el usuario. Me refiero a que si deseas probar tu lógica, separa esa parte dentro de tu código y luego si quieres hacer pruebas de la interacción con el usuario, solo te enfoques a eso. Por último, te recomiendo estos enlaces:
El primer enlace te dice como "organizar" mejor tu código, por lo que preguntabas de incluir el
if __name__ == '__main__':
es precisamente cuando ejecutas la prueba directapython3 test/test_input_utils.py
en lugar depython3 -m unittest tests/test_input_utils.py
, pero lo puedes organizar en un solo archivo como una "suite" de pruebas, y mandas a llamar desde ahí todas las pruebas que quieres hacer, y solo ejecutar algo comopython3 tests/suite.py
y eso te permite hacerlo más "sencillo".A ver si luego comparto en phpmx algunos tips con GitHub Actions: https://github.com/marketplace/actions/python-unit-test