ho questo:Come rendere la classe più testabile?
class FooGenerator:IFooGenerator {
private object _generated;
public void Generate() {
// Generating
GenerateSmallPart();
GenerateOtherSmallPart();
GenerateTinyPart();
// A lot similar
}
private void GenerateSmallPart() {
//add small part to _generated
}
private void GenerateOtherSmallPart() {
//add small part to _generated
}
private void GenerateTinyPart() {
//add small part to _generated
}
}
internal interface IFooGenerator {
void Generate();
}
Nella mia applicazione uso solo IFooGenerator
via CIO, ma voglio provare tutti quei metodi secondari.
Come ho trovato here, un'opzione è di estrarre la classe con tutti i metodi secondari. Ma perché ho bisogno di farlo. Viene utilizzato solo in FooGenerator
.
Avete qualche suggerimento come posso rendere più testabile la mia lezione?
Per quanto ne so, si dovrebbe provare contro l'API pubblica, non quella interna, quindi è necessario testare "IFooGenerator.Generate" e verificare se il risultato è quello che ci si aspetterebbe. Ma se vuoi davvero testare la parte 'costruzione', forse è una buona idea estrarre le parti 'Genera' in un costruttore ...? –
Dato che tutti quei metodi non restituiscono nulla, mi chiedo come li vuoi testare comunque ... Stai usando Mock? Se è così, puoi verificarli anche quando testi solo il metodo pubblico. Ma attenzione: questo molto probabilmente crea test fragili. –
:) Sì! inizia un po 'di black box/white box testing flamewar :) Per me IL MEDICO ha ragione. – wonko79