Immagina una classe di codice psedo come questa che nomi i confronti:
public class NameComparer
{
public bool DoNamesMatch(Name name1, Name name2)
{
if(WholeNameMatch(name1, name2))
{
return true;
}
return ProcessorIntensiveFuzzyMatcher(name1.Forename, name2.Forename)
&& ProcessorIntensiveFuzzyMatcher(name1.Surname, name2.Surname)
}
private bool WholeNameMatch(Name name1, Name name2)
{
return (name1.Forename == name2.Forename)
&& (name1.Surname == name2.Surname);
}
private bool ProcessorIntensiveFuzzyMatcher(string string1, string string2)
{
// complex fuzzy matching
}
}
La best practice suggerisce che questa classe dovrebbe avere un solo metodo pubblico, e che dovremmo testare unitariamente i metodi privati in questa classe attraverso quel metodo pubblico.
Mentre posso scrivere vari test che assicurano che WholeNameMatch
e ProcessorIntensiveFuzzyMatcher
facciano entrambi quello che dovrebbero fare, l'ordine delle operazioni è importante qui. Se uno sviluppatore si muove erroneamente uno sopra l'altro, il programma subirà un enorme successo in termini di prestazioni.
È auspicabile, e possibile, testare questo ordine di operazioni tramite il metodo pubblico esposto?