Eu acho que uma pergunta mais fundamental deve ser feita: por que você está tentando testar o método privado em primeiro lugar? É um cheiro de código que você está tentando testar o método privado através da interface pública dessa classe, enquanto esse método é privado por um motivo, pois é um detalhe de implementação. Deve-se preocupar apenas com o comportamento da interface pública e não com a maneira como ela é implementada nos bastidores.
Se eu quiser testar o comportamento do método privado, usando refatorações comuns, posso extrair seu código para outra classe (talvez com visibilidade no nível do pacote, para garantir que não faça parte de uma API pública). Posso então testar seu comportamento isoladamente.
O produto da refatoração significa que o método privado agora é uma classe separada que se tornou um colaborador da classe original. Seu comportamento será bem compreendido por meio de seus próprios testes de unidade.
Posso então zombar de seu comportamento quando tento testar a classe original, para poder me concentrar em testar o comportamento da interface pública dessa classe, em vez de ter que testar uma explosão combinatória da interface pública e o comportamento de todos os seus métodos privados .
Eu vejo isso como dirigir um carro. Quando dirijo um carro, não dirijo com o capô para cima, para ver que o motor está funcionando. Eu confio na interface que o carro fornece, ou seja, o conta-rotações e o velocímetro para saber que o motor está funcionando. Eu confio no fato de que o carro realmente se move quando eu pressiono o acelerador. Se eu quiser testar o mecanismo, posso verificar isso isoladamente. : D
É claro que testar métodos privados diretamente pode ser o último recurso se você tiver um aplicativo herdado, mas eu preferiria que o código herdado seja refatorado para permitir um teste melhor. Michael Feathers escreveu um ótimo livro sobre esse assunto. http://www.amazon.co.uk/Working-Effectively-Legacy-Robert-Martin/dp/0131177052
pre-historic
em termos de anos na Internet, mas o teste de unidade de métodos privados agora é fácil e direto, com o Visual Studio produzindo as classes de acessador necessárias quando necessário e pré-preencher a lógica dos testes com trechos muito próximos do que se pode desejar para testes funcionais simples. Veja por exemplo. msdn.microsoft.com/pt-br/library/ms184807%28VS.90%29.aspx