I want to write tests for it.
Che cosa intendi testare?
I want to use TDD. I'm refactoring a parser and want to test the 'parse()' method.
Quindi l'obiettivo è quello di pulire le cose.
Direi che il refactoring del codice legacy non è conforme al 100% w / TDD.
Il codice errato limita il test.
Ancora più importante: l'intenzione di ripulirlo (l'unità - il motivo della modifica del codice) differisce dall'intenzione originale di consentire al codice di eseguire qualsiasi tipo di dominio aziendale.
passaggio 1
Vorrei iniziare con un test di integrazione sciatto che copre la maggior parte delle funzionalità.
Feed test input grezzi - ad es. quei file di risorse da 50 MB.
Chiedi solo risultati brillanti e ignora le cose interne.
In realtà è importante - l'astrazione del test più elevata è ciò che allenta le restrizioni di implementazione.
Ciò ti darà una rete di sicurezza in modo che tu possa aprire il codice per il refactoring senza timore.
passaggio 2
Una volta ottenuto ciò, sei pronto per entrare effettivamente in & refactoring.
Leggi il codice. Avvia piccolo . ( buon libro )
Cose come la formattazione del codice, la rimozione dello spazio bianco in eccesso, la rimozione dei prefissi delle variabili troppo prolissi.
Quindi vai alle modifiche strutturali - estrai metodi, interfacce, classi dove necessario.
E non solo dividere & conquistare - prova a combinare cose dove "ha senso" ™.
Solo con una struttura decente del codice sarai in grado di scrivere test unitari per unità isolate di funzionalità.
Se il test di integrazione che hai iniziato funziona abbastanza bene, non mi preoccuperei nemmeno di provare a creare una rete di test delle unità.
In entrambi i casi - la corretta struttura del codice ti condurrà in modo naturale & facile da fermare la giunzione di I / O.
Una volta che la rete dei test unitari è abbastanza strong - rimuovi i test di integrazione.
Oppure stub l'input allo stesso modo dei test unitari (sorta di test dell'integralizzazione degli svaluti).