Creo que una pregunta más fundamental que debería hacerse es: ¿por qué estás tratando de probar el método privado en primer lugar? Ese es un olor a código que está tratando de probar el método privado a través de la interfaz pública de esa clase, mientras que ese método es privado por una razón, ya que es un detalle de implementación. Uno solo debe preocuparse por el comportamiento de la interfaz pública, no por cómo se implementa bajo las cubiertas.
Si quiero probar el comportamiento del método privado, mediante el uso de refactorizaciones comunes, puedo extraer su código en otra clase (tal vez con visibilidad a nivel de paquete, así que asegúrese de que no sea parte de una API pública). Entonces puedo probar su comportamiento de forma aislada.
El producto de la refactorización significa que el método privado ahora es una clase separada que se ha convertido en colaboradora de la clase original. Su comportamiento se habrá entendido bien a través de sus propias pruebas unitarias.
Entonces puedo burlarme de su comportamiento cuando intento probar la clase original para poder concentrarme en probar el comportamiento de la interfaz pública de esa clase en lugar de tener que probar una explosión combinatoria de la interfaz pública y el comportamiento de todos sus métodos privados. .
Veo esto análogo a conducir un automóvil. Cuando conduzco un automóvil, no conduzco con el capó hacia arriba, así puedo ver que el motor está funcionando. Confío en la interfaz que proporciona el automóvil, a saber, el cuentarrevoluciones y el velocímetro para saber si el motor funciona. Confío en el hecho de que el automóvil realmente se mueve cuando presiono el acelerador. Si quiero probar el motor, puedo hacer controles de forma aislada. :RE
Por supuesto, probar métodos privados directamente puede ser un último recurso si tiene una aplicación heredada, pero preferiría que el código heredado se refactorice para permitir mejores pruebas. Michael Feathers ha escrito un gran libro sobre este mismo tema. http://www.amazon.co.uk/Working-Effectively-Legacy-Robert-Martin/dp/0131177052
pre-historic
en términos de años de Internet, pero las pruebas unitarias de métodos privados ahora son fáciles y directas, ya que Visual Studio produce las clases de acceso necesarias cuando es necesario y llenar previamente la lógica de las pruebas con fragmentos muy cercanos a lo que uno puede desear para pruebas funcionales simples. Ver por ej. msdn.microsoft.com/en-us/library/ms184807%28VS.90%29.aspx