Ho un dibattito con un collega programmatore sul fatto che sia una buona o una cattiva pratica modificare un pezzo di codice funzionante solo per renderlo testabile (tramite test unitari per esempio).
La mia opinione è che sia OK, entro i limiti del mantenimento di buone pratiche orientate agli oggetti e all'ingegneria del software, ovviamente (non "rendere tutto pubblico", ecc.)
L'opinione del mio collega è che il codice di modifica (che funziona) solo a scopo di test sia sbagliato.
Un semplice esempio, pensa a questo pezzo di codice usato da qualche componente (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 svolgerà il lavoro effettivo:
public void DoSomething(Assembly asm)
{
// not relying on Assembly.GetExecutingAssembly() anymore...
}
Questo metodo accetta un oggetto Assembly su cui lavorare, rendendo possibile passare il proprio Assembly per eseguire il test. La mia collega non ha ritenuto che questa fosse una buona pratica.
Che cosa è considerato una buona pratica comune?