Questo ti è mai successo? Hai una suite di moduli ben progettati, a responsabilità unica, coperti da test unitari. In qualsiasi funzione di livello superiore che si codifica, si è (il 95% del codice) semplicemente prendendo l'output da un modulo e passandolo come input al successivo. Quindi, noti che questa funzione di livello superiore si è trasformata in uno script di oltre 100 righe con più responsabilità.
Ecco il problema. È difficile (impossibile) testare quella sceneggiatura. Almeno, sembra così. Sei d'accordo? Nel mio attuale progetto, tutti i bug provenivano da questo script.
Ulteriori dettagli: ogni script rappresenta una soluzione unica, o algoritmo, formato utilizzando diversi moduli in modi diversi.
Domanda: come puoi rimediare a questa situazione?
Risposta per il jerk: rompere lo script in moduli a responsabilità singola.
Commento sulla risposta istintiva: lo è già!
Risposta migliore che riesco a fare finora: creare oggetti connettore di livello superiore che "uniscono" i moduli in un modo particolare (prelevare l'output da un modulo, alimentarlo come input per un altro modulo). Quindi se il nostro script fosse:
Foo.Input fooIn = new Foo.Input(1, 2);
Foo.Output fooOutput = fooModule.operate(fooIn);
Double runtimevalue = getsomething(fooOutput.whatever);
Bar.Input barIn = new Bar.Input( runtimevalue, fooOutput.someOtherValue);
Bar.Output barOut = barModule.operate(barIn);
Diventerebbe con un connettore:
FooBarConnectionAlgo fooBarConnector = new fooBarConnector(fooModule, barModule);
Foo.Input fooIn = new Foo.Input(1, 2);
Bar.Output barOut = fooBarConnector.operate(fooIn);
Quindi il vantaggio è che oltre a nascondere un codice e rendere le cose più chiare, possiamo testare FooBarConnectionAlgo.
Sono sicuro che questa situazione si presenta molto. Che cosa fai?