Vengo del mundo de Java, donde puede ocultar variables y funciones y luego ejecutar pruebas unitarias contra ellas mediante la reflexión. He utilizado funciones anidadas para ocultar los detalles de implementación de mis clases para que solo la API pública esté visible. Estoy intentando escribir pruebas unitarias contra estas funciones anidadas para asegurarme de que no las rompo a medida que desarrollo. He intentado llamar a una de las funciones anidadas como:Pruebas de unidad de ejecución en funciones anidadas
def outer():
def inner():
pass
outer.inner()
que se traduce en el mensaje de error:
AttributeError: 'function' object has no attribute 'inner'
¿Hay alguna manera de escribir pruebas unitarias contra estas funciones anidados? Si no, ¿hay alguna manera de activar el nombre de munging para los nombres de las funciones como se puede para las variables de la clase prefijando con __?
¿Cómo afecta esto a responder la pregunta? ¿Existen buenas soluciones para aislar tales funciones internas para pruebas unitarias o no? Incluso sin acceso al objeto de función interno desde el exterior, tal podría lograrse aparentemente con el uso de los módulos de python analizador, ast o tokenizador para cortar el código en sí mismo. Obviamente, es más fácil de decir que codificar. :-) –
Responde la pregunta porque uno * no * prueba * privado, detalles de implementación. Puede confiar en las herramientas de cobertura de prueba para informarle si las pruebas de la interfaz pública ejercen adecuadamente la implementación privada. – SingleNegationElimination
@Tim: Según la última oración de la pregunta, el autor está bien con una función no interna si se puede marcar como privada. Por lo tanto, conocer esta convención es útil. – orip