Contesto:
Attualmente sto lavorando a un piccolo progetto in Python. Strutturo comunemente le mie classi con alcuni metodi pubblici che sono documentati ma riguardano principalmente i concetti di alto livello (ciò che un utente della classe dovrebbe conoscere e usare) e un mucchio di metodi nascosti (che iniziano con il trattino basso) che si occupano del elaborazione complessa o di basso livello.
So che i test sono essenziali per dare fiducia al codice e per garantire che eventuali modifiche successive non abbiano rotto il comportamento precedente.
Problema:
Al fine di costruire metodi pubblici di livello superiore su una base attendibile, generalmente collaudo i metodi privati. Trovo più facile scoprire se una modifica del codice ha introdotto regressioni e dove. Ciò significa che tali test interni possono violare revisioni minori e dovranno essere riparati / sostituiti
Ma so anche che il metodo privato di unit testing è almeno un concetto controverso o più spesso considerato una cattiva pratica. Il motivo è: solo il comportamento pubblico dovrebbe essere testato ( rif. )
Domanda:
Mi interessa seguire le migliori pratiche e vorrei capire:
- perché usare i test unitari su metodi privati / nascosti è male (qual è il rischio)?
- quali sono le migliori pratiche quando i metodi pubblici possono utilizzare elaborazioni di basso livello e / o complesse?
precisioni:
- non è un modo di mettere in discussione. Python non ha un vero concetto di privacy e i metodi nascosti non sono semplicemente elencati ma possono essere utilizzati quando si conosce il loro nome
- Non mi sono mai state insegnate regole e schemi di programmazione: le mie ultime lezioni sono degli anni '80 ... Ho imparato principalmente le lingue da prove e fallimenti e riferimenti su Internet (Stack Exchange è il mio preferito da anni)