Ho un dibattito con un collega programmatore sul fatto che sia una buona o cattiva pratica modificare un pezzo di codice funzionante solo per renderlo testabile (ad esempio tramite test unitari).
La mia opinione è che sia OK, entro i limiti del mantenimento di buone pratiche orientate agli oggetti e di ingegneria del software (non "rendere tutto pubblico", ecc.).
L'opinione del mio collega è che la modifica del codice (che funziona) solo a scopo di test sia errata.
Solo un semplice esempio, pensa a questo pezzo di codice che viene utilizzato da alcuni componenti (scritto in C #):
public void DoSomethingOnAllTypes()
{
var types = Assembly.GetExecutingAssembly().GetTypes();
foreach (var currentType in types)
{
// do something with this type (e.g: read it's attributes, process, etc).
}
}
Ho suggerito che questo codice può essere modificato per richiamare un altro metodo che farà il lavoro effettivo:
public void DoSomething(Assembly asm)
{
// not relying on Assembly.GetExecutingAssembly() anymore...
}
Questo metodo utilizza un oggetto Assembly su cui lavorare, rendendo possibile il passaggio del proprio assembly su cui eseguire i test. Il mio collega non pensava che questa fosse una buona pratica.
Qual è considerata una pratica buona e comune?
Type
come parametro, non unAssembly
.