Hay un aspecto de TDD que nunca entendí del todo.TDD: ¿Qué métodos expone para las pruebas unitarias?
Supongamos que alguien le pide que implemente un objeto Stack simple. Si ha hecho su diseño correctamente, obtendrá una API mínima y limpia. Supongamos: push()
, pop()
y isEmpty()
. Cualquier cosa más que eso está exagerando la demanda y permitiendo que el usuario tenga demasiado espacio para meterse con su código.
Ahora supongamos que quiere probar su código unitariamente. ¿Cómo hace esto si todos sus métodos públicos son solo los tres que se muestran arriba? Esos métodos tomarán sus pruebas solo hasta ahora.
Por lo tanto, puede agregar métodos privados, que no lo ayudan en absoluto, ya que no son visibles para su caso de prueba de la unidad. O haces públicos esos métodos y ahí va tu API minimalista con la que trabajaste tan duro. Ahora el usuario va a meterse con su pila y los errores seguramente llegarán.
¿Cómo maneja este dilema de abrir los métodos públicos para las pruebas frente a una API limpia y simple?
Editar: acaba de apuntar en la dirección correcta, sería bueno para obtener punteros técnicos (como "utilizar este truco para exponer los métodos privados", etc ...) pero yo soy mucho más intrested en más respuestas genéricas en cuanto a cuál de los dos conceptos es más importante, y cómo abordar este tema.
Aquí hay otra pregunta sobre el mismo tema: [¿Cómo pruebas los métodos privados de la unidad?] (Http://stackoverflow.com/questions/250692/how-do-you-unit-test-private-methods) –