Nota del moderatore: ci sono già 39 risposte pubblicate qui (alcune sono state eliminate). Prima di pubblicare la risposta, considera se puoi aggiungere qualcosa di significativo alla discussione. Molto probabilmente stai solo ripetendo ciò che qualcun altro ha già detto.
Occasionalmente mi ritrovo a dover fare un metodo privato in una classe pubblica solo per scrivere alcuni test unitari.
Di solito ciò è dovuto al fatto che il metodo contiene una logica condivisa tra altri metodi della classe ed è più ordinato testare la logica da solo, oppure un altro motivo potrebbe essere possibile se voglio testare la logica utilizzata nei thread sincroni senza doversi preoccupare dei problemi di threading .
Altre persone si trovano a farlo, perché non mi piace davvero farlo ?? Personalmente penso che i bonus superino i problemi di rendere pubblico un metodo che in realtà non fornisce alcun servizio al di fuori della classe ...
AGGIORNARE
Grazie per le risposte a tutti, sembra aver suscitato l'interesse delle persone. Penso che il consenso generale sia che i test dovrebbero avvenire tramite l'API pubblica poiché questo è l'unico modo in cui una classe verrà mai utilizzata e sono d'accordo con questo. La coppia di casi che ho menzionato in precedenza, in cui lo farei sopra, erano casi non comuni e ho pensato che ne valessero la pena.
Riesco comunque a vedere tutti quanti indicano che non dovrebbe mai accadere davvero. E a pensarci un po 'di più, penso che cambiare il tuo codice per adattarlo ai test sia una cattiva idea - dopo tutto suppongo che il test sia uno strumento di supporto in un certo modo e cambiare un sistema per "supportare uno strumento di supporto", se vuoi, è palese cattiva pratica.
@VisibileForTesting
un'annotazione per creare tali metodi - ti consiglio di farlo in modo che il motivo del mancato metodo sia private
documentato correttamente.