2009-05-07 2 views
6

Vale la pena scrivere prove per cose che accadono sul server, ma ho sentito dire che è davvero difficile scrivere un test unitario per le cose dell'interfaccia utente e che sono fragili e inaffidabili. Mi piacerebbe avere più fiducia che i cambiamenti che faccio non rompano le parti principali delle pagine di importazione sul mio sito.Vale la pena di scrivere test che funzionano con il browser (come l'uso del selenio o qualcosa del genere)?

Qualche idea o esperienza?

risposta

2

Li ho usati come parte dello sviluppo. la cosa bella di loro è che puoi eseguirli anche in IE (hai bisogno di un server di selenio per questo). Li ho usati solo in fase di sviluppo e non li trattano come test unitari. se faccio qualche logica specifica dell'interfaccia utente, aiutano molto.

la cosa più importante è assegnare l'id a tutti gli elementi html utilizzati. senza di essa i test sono molto fragili. l'utilizzo di commenti aiuta anche.

3

È facile, potrebbe essere fatto da una persona poco tecnicamente e sicuramente vale la pena. Il test dell'interfaccia utente è difficile per le applicazioni desktop, non è così difficile per le app Web perché è possibile spostare i controlli e il selenio sarà ancora in grado di trovarli in HTML. Nessuna fortuna per i poveri sviluppatori di desktop.

Ovviamente c'è sempre la possibilità di esagerare fino al punto in cui non ti dà molto indietro rispetto allo sforzo ma è lo stesso con il normale test delle unità. Dovresti sapere quando fermarti.

0

È possibile utilizzare browsershots.org per controllare l'aspetto delle pagine in quasi tutti i browser.

1

Più test si scrivono per coprire le diverse dinamiche dell'applicazione, meglio è. Quando arriva il momento che devi modificare qualcosa su una pagina generata dall'app, i tuoi test ti diranno se qualcosa si rompe.

sì, sono fragili e sì, è un dolore mantenendo i percorsi di selezione folli di lavoro giusto ...

4

test dell'interfaccia utente può essere lento, fragile e doloroso per mantenere, ma alcuni bug possono essere catturati soltanto nei test dell'interfaccia utente. La questione importante non è se valga la pena di scrivere test dell'interfaccia utente, ma come mantenere i vostri test dell'interfaccia utente utili, stabili e mantenibili.

Un errore comune è utilizzare i test dell'interfaccia utente come sostituto per altri test. In teoria, puoi testare molte funzionalità attraverso i test dell'interfaccia utente, ma ci sono molti problemi con questo approccio. Per i principianti, alcune funzionalità potrebbero essere molto difficili da testare direttamente nell'interfaccia utente (in particolare condizioni eccezionali). In secondo luogo, se un test fallisce, spesso è difficile capire quale sia la fonte del problema. Infine, più percorsi di codice vengono testati nei test dell'interfaccia utente, più lenti diventano i test dell'interfaccia utente. Se fai affidamento solo su test lenti, la tua produttività peggiora, il che aumenta la tentazione di "provvisori" disattivare i test non funzionanti.

Il mio consiglio è di testare il più possibile in unit test e test di integrazione, creare una buona separazione tra l'interfaccia utente e la logica di business e utilizzare i test dell'interfaccia utente per rilevare/prevenire bug che non possono essere testati in altri tipi di test.

Se si dispone di molti test, prendere in considerazione la creazione di più suite. Creo una suite per i test dell'interfaccia utente, uno per i test di integrazione e uno per i test delle unità. I test unitari sono molto veloci, quindi li eseguo mentre sviluppo il mio codice (spesso tramite TDD). Questi sono i test che mi aiutano a essere produttivi.

I test di integrazione vengono eseguiti meno spesso (forse dopo aver implementato un po 'di modifiche). I test dell'interfaccia utente vengono eseguiti quando mi sto preparando a inviare una modifica (o quando scrivo più test dell'interfaccia utente, ovviamente).

Un ultimo consiglio: considera la scrittura dei test dell'interfaccia utente con Domain Specific Language. Ciò semplifica la comprensione dei test (perché vengono letti come un insieme di passaggi utente e non come un gruppo di azioni browser di basso livello). Inoltre, può rendere il codice più facile da mantenere. Ad esempio, invece di sottoporre tutti i test alle azioni del browser passo per passo per accedere all'utente, potresti vedere:

LoginPage loginPage = new LoginPage(selenium); 
HomePage homePage = loginPage 
    .enterUserName(TestUsers.Alice.USER_NAME) 
    .enterPassword(TestUsers.Alice.PASSWORD) 
    .submit(); 
assertThat(homePage.getBreadcrumbs(), equalTo("Home"));