¿Debo probar métodos privados o sólo públicos? [cerrado]

Resuelto Patrick Desjardins asked hace 15 años • 31 respuestas

He leído esta publicación sobre cómo probar métodos privados. Normalmente no los pruebo porque siempre pensé que es más rápido probar sólo métodos públicos que serán llamados desde fuera del objeto. ¿Pruebas métodos privados? ¿Debo probarlos siempre?

Patrick Desjardins avatar Sep 20 '08 02:09 Patrick Desjardins
Aceptado

No realizo pruebas unitarias de métodos privados. Un método privado es un detalle de implementación que debe estar oculto para los usuarios de la clase. Probar métodos privados rompe la encapsulación.

Si encuentro que el método privado es enorme, complejo o lo suficientemente importante como para requerir sus propias pruebas, simplemente lo coloco en otra clase y lo hago público allí ( Objeto de método ). Entonces puedo probar fácilmente el método anteriormente privado pero ahora público que ahora vive en su propia clase.

jop avatar Sep 19 '2008 19:09 jop

¿Cuál es el propósito de las pruebas?

La mayoría de las respuestas hasta ahora dicen que los métodos privados son detalles de implementación que no importan (o al menos no deberían) siempre que la interfaz pública esté bien probada y funcione. Eso es absolutamente correcto si el único propósito de la prueba es garantizar que la interfaz pública funcione .

Personalmente, mi uso principal de las pruebas de código es garantizar que futuros cambios de código no causen problemas y ayudar en mis esfuerzos de depuración si los causan. Creo que probar los métodos privados tan a fondo como la interfaz pública (¡si no más!) promueve ese propósito.

Considere: tiene el método público A que llama al método privado B. A y B utilizan el método C. C se cambia (quizás por usted, quizás por un proveedor), lo que hace que A comience a fallar en sus pruebas. ¿No sería útil tener también pruebas para B, aunque sea privado, para saber si el problema está en el uso de C por parte de A, en el uso de C por parte de B o en ambos?

Probar métodos privados también agrega valor en los casos en que la cobertura de prueba de la interfaz pública es incompleta. Si bien esta es una situación que generalmente queremos evitar, la eficiencia de las pruebas unitarias depende tanto de que las pruebas encuentren errores como de los costos de desarrollo y mantenimiento asociados de esas pruebas. En algunos casos, los beneficios de una cobertura de prueba del 100% pueden considerarse insuficientes para justificar los costos de esas pruebas, lo que produce lagunas en la cobertura de pruebas de la interfaz pública. En tales casos, una prueba bien dirigida de un método privado puede ser una adición muy eficaz al código base.

Dave Sherohman avatar Sep 19 '2008 20:09 Dave Sherohman