2009-12-08 20 views
8

Sono un neofita dei test unitari quindi vorrei avere l'opinione di alcuni che sono un po 'più attenti.test unitari per screen-scraping?

Ho bisogno di scrivere qualche codice di screen-scraping a breve. Il sistema di destinazione è un web ui in cui ci sarà un copioso parsing HTML e simili volatilità positive coinvolte. Non mi verrà mai notificato alcun cambiamento da parte del sistema di destinazione (ad es. Hanno messo una riprogettazione sul proprio sito o in altro modo cambiano funzionalità). Quindi prevedo che il mio codice si rompa regolarmente.

Quindi penso che la mia vera domanda sia, quanto, se del caso, del mio test unitario dovrebbe preoccuparsi o gestire l'interfaccia (il sito Web che sto raschiando) cambiando?

Penso che i test di unità o no, avrò bisogno di testare pesantemente in fase di esecuzione dal momento che ho bisogno di garantire che i dati che sto consumando è incontaminata. Anche se avessi eseguito i test unitari prima di ogni esecuzione, l'interfaccia utente web poteva ancora cambiare tra test e runtime.

Così mi concentro sul testing in-code e sulla gestione delle eccezioni? Significa tracciare una linea nella sabbia ed escludere completamente questo tipo di test dai test unitari?

Grazie

+1

Non penso che intendiate "unit test". I test di unità sono qualcosa che esegui per testare il codice che hai scritto essenzialmente a livello di metodo. Il modo in cui sto leggendo la tua domanda, suona più come se tu parlassi di test automatici per vedere se il tuo contributo è abbastanza buono da poter essere utilizzato per il resto del lavoro. È vero? –

+0

Beh, non ne sono sicuro, ma per esempio avevo immaginato forse un metodo getGoogleSearchResult() e per quel metodo potevo fare un test e delle asserzioni. E no, non sto raschiando Google SERP.:) – Chris

risposta

6

Le prove dell'unità devono sempre essere progettate per avere risultati noti ripetibili.

Pertanto, a prova di unità di screen-scraper, si dovrebbe scrivere il test contro una serie nota di HTML (è possibile utilizzare un oggetto fittizio per rappresentare questo)

il genere di cosa si sta parlando doesn Mi sembra davvero uno scenario per i test unitari, se si desidera garantire che il codice venga eseguito nel modo più efficace possibile, allora si tratta più, come dici tu, del test in-code e della gestione delle eccezioni.

Includerei anche un codice di avviso, in modo che il sistema ti rendesse conto di eventuali occasioni in cui l'HTML non viene analizzato come previsto.

+0

Sì. Ho fatto qualcosa di molto simile. Ottieni un codice HTML che corrisponda a vari casi (sezione presente, sezione mancante, tabella vuota, ecc.) E inserisci tali stringhe nella tua classe di analisi (che dovrebbe essere separata dalla classe di downloader Web). – TrueWill

+0

Grazie Penso che questo in realtà parla del mio esatto conflitto con questo. E concordato sul codice di allerta! – Chris

1

Credo che il test di unità cosa che potrebbe essere utile per qui è se si dispone di un build server che vi darà un primo avviso il codice non funziona più. Non è possibile scrivere un test unitario per dimostrare che lo screencraping funzionerà ancora se il sito cambia il suo HTML (perché non si può dire cosa cambieranno).

Potresti essere in grado di scrivere un test unitario per verificare che qualcosa di utile sia stato restituito dai tuoi sforzi.

+0

Controllare che qualcosa di utile (e che rientri nei limiti noti) è fondamentalmente ciò che avevo in mente se avrei scritto test unitari sui vari metodi di scraping. – Chris

2

Si dovrebbe provare a separare i test il più possibile. Testare la gestione dei dati con test di basso livello che eseguono il codice effettivo (ad esempio non tramite un browser simulato).

Nel browser simulato, è sufficiente assicurarsi che le cose giuste accadano quando si fa clic sui pulsanti, quando si inviano i moduli e quando si seguono i collegamenti.

Non provare mai a verificare se il layout è corretto.

+0

Nessun browser nel mix. Esecuzione e arricciatura della riga di comando. – Chris