Rendere pubblico un metodo privato per testarlo unitamente … buona idea?

Nota del moderatore: ci sono già 39 risposte pubblicate qui (alcune sono state cancellate). Prima di pubblicare la risposta, valuta se è ansible aggiungere qualcosa di significativo alla discussione. Probabilmente stai semplicemente ripetendo ciò che qualcun altro ha già detto.


Occasionalmente mi trovo a dover rendere un metodo privato in un pubblico di class solo per scrivere alcuni test unitari per questo.

Di solito questo sarebbe dovuto al fatto che il metodo contiene la logica condivisa tra altri metodi nella class ed è più ordinato testare la logica da sola, o potrebbe essere ansible un’altra ragione se voglio testare la logica usata nei thread sincroni senza dovermi preoccupare dei problemi di threading .

Le altre persone si trovano a farlo, perché non mi piace davvero farlo ?? Personalmente ritengo che i bonus superino i problemi legati al rendere pubblico un metodo che non fornisce alcun servizio al di fuori della class …

AGGIORNARE

Grazie per le risposte a tutti, sembra aver suscitato l’interesse delle persone. Penso che il consenso generale sia il test dovrebbe avvenire tramite l’API pubblica in quanto questo è l’unico modo in cui una class verrà mai utilizzata, e sono d’accordo con questo. Il paio di casi che ho citato sopra dove vorrei fare questo sopra erano casi rari e ho pensato che ne valesse la pena.

Posso tuttavia, vedere tutti sottolinea che non dovrebbe mai accadere davvero. E quando ci penso un po ‘di più penso che cambiare il tuo codice per adattarlo ai test sia una ctriggers idea – dopotutto suppongo che il testing sia uno strumento di supporto in un certo senso e cambiare un sistema per “supportare uno strumento di supporto”, se vuoi, è palese cattive pratiche