Il modello TestDataBuilder viene utilizzato nel test delle unità per creare collaboratori. I suoi vantaggi rispetto all'uso dei costruttori:
- Le modifiche ai costruttori sono localizzate.
- Il codice di prova diventa più chiaro, perché non devi specificare tutti i parametri richiesti al costruttore.
Uno svantaggio è che l'utilizzo è alquanto lento e diminuisce la leggibilità:
var service = serviceBuilder.WithRepo(
repoBuilder.WithEntities(
new [] { entityBuilder.WithName("name") }).Build())
.WithMailSender(mailSenderBuilder.Build())
.Build();
- La parola "Con" viene in genere ripetuta molte volte.
- Lo stesso per la chiamata a
Build()
. - Lo stesso per la parola
Builder
.
Sebbene tutti possano essere mitigati, suppongo che le soluzioni stesse abbiano degli svantaggi. Ad esempio, potremmo rinominare serviceBuilder
in service
, ma ciò potrebbe dare l'impressione sbagliata sul tipo di variabile. Potremmo implementare una conversione implicita da una classe builder all'oggetto che genera, ma è più codice nel builder in aggiunta ai già abbondanti metodi With*
.
Esiste un'alternativa a TestDataBuilder che non ha questi svantaggi?