Nota para el moderador: ya hay 39 respuestas publicadas aquí (algunas se han eliminado). Antes de publicar su respuesta, considere si puede agregar algo significativo a la discusión. Es más que probable que solo estés repitiendo lo que otra persona ya ha dicho.
Ocasionalmente me encuentro necesitando hacer un método privado en una clase pública solo para escribir algunas pruebas unitarias para él.
Por lo general, esto se debe a que el método contiene lógica compartida entre otros métodos en la clase y es más ordenado probar la lógica por sí mismo, o podría ser posible otra razón si quiero probar la lógica utilizada en subprocesos sincrónicos sin tener que preocuparme por problemas de subprocesos .
¿Se encuentran otras personas haciendo esto, porque realmente no me gusta hacerlo? Personalmente, creo que los bonos superan los problemas de hacer público un método que realmente no proporciona ningún servicio fuera de la clase ...
ACTUALIZAR
Gracias por las respuestas a todos, parece haber despertado el interés de la gente. Creo que el consenso general es que las pruebas deberían realizarse a través de la API pública, ya que esta es la única forma en que se utilizará una clase, y estoy de acuerdo con esto. Los dos casos que mencioné anteriormente donde haría esto anteriormente fueron casos poco comunes y pensé que los beneficios de hacerlo valieron la pena.
Sin embargo, puedo ver que todos señalan que nunca debería suceder realmente. Y cuando lo pienso un poco más, creo que cambiar su código para acomodar las pruebas es una mala idea, después de todo, supongo que las pruebas son una herramienta de soporte de alguna manera y cambiar un sistema para 'soportar una herramienta de soporte' si lo desea, es descarado mala práctica.
@VisibileForTesting
anotación para hacer tales métodos; le recomiendo que haga esto para que la razón por la cual el método no private
esté debidamente documentado.