Contexto:
Actualmente estoy trabajando en un pequeño proyecto en Python. Comúnmente estructuro mis clases con algunos métodos públicos que están documentados pero que tratan principalmente con los conceptos de alto nivel (lo que un usuario de la clase debe saber y usar), y un montón de métodos ocultos (comenzando con guiones bajos) que están a cargo de procesamiento complejo o de bajo nivel.
Sé que las pruebas son esenciales para dar confianza en el código y para garantizar que cualquier modificación posterior no haya roto el comportamiento anterior.
Problema:
Para construir los métodos públicos de nivel superior sobre una base confiable, generalmente pruebo los métodos privados. Me resulta más fácil encontrar si una modificación de código ha introducido regresiones y dónde. Significa que esas pruebas internas pueden infringir revisiones menores y deberán ser reparadas / reemplazadas
Pero también sé que el método privado de pruebas unitarias es al menos un concepto en disputa o más a menudo considerado como una mala práctica. La razón es: solo se debe probar el comportamiento público ( ref. )
Pregunta:
Me importa seguir las mejores prácticas y me gustaría entender:
- ¿por qué es malo usar pruebas unitarias en métodos privados / ocultos (cuál es el riesgo)?
- ¿Cuáles son las mejores prácticas cuando los métodos públicos pueden usar procesamiento de bajo nivel y / o complejo?
Precisiones
- no es una forma de pregunta. Python no tiene un verdadero concepto de privacidad y los métodos ocultos simplemente no se enumeran, pero se pueden usar cuando se conoce su nombre
- Nunca me han enseñado reglas y patrones de programación: mis últimas clases son de los años 80 ... Aprendí idiomas principalmente por prueba y fracaso y referencias en Internet (Stack Exchange fue mi favorito durante años)