2009-04-29 1 views
5

Ho pensato di scrivere test unitari per i miei progetti PHP/MySQL.Test delle unità in PHP?

La cosa che mi bug è come posso provare cose come validazione dei form, funzioni ajax, e funzionalità dell'interfaccia utente (ad esempio cliccando su link). Inoltre, non voglio che i test dipendano da un aspetto dell'interfaccia utente, quindi se avessi spostato un link, tutti i test si sarebbero interrotti.

Qualcuno ha qualche idea/suggerimento su quali parti del codice dovrei test di unità, circa quanto tempo dovrebbe essere speso per unit test, e altri suggerimenti/suggerimenti?

+1

http://stackoverflow.com/questions/570451/how-to-best-do-unit-testing-for-a-web-application –

risposta

2

I test di unità, almeno da un punto di vista dello sviluppo di applicazioni Web, non possono realmente coprire la progettazione dell'interfaccia utente. Quali test dell'unità è possibile eseguire con è testare l'input/output di tutti i metodi del controller e/o tutte le funzioni singleton/globali in uso. Pertanto, se desideri ottenere la copertura del test unitario sulla convalida del modulo, assicurati che la tua applicazione sia strutturata in modo tale da poter testare la tua funzione di convalida indipendentemente dall'interfaccia utente.

class SomeController extends ... { 
    ... function isAPhoneNumber($string){ 
     if(...) { 
      return true; 
     } 
     else (...) { 
      return false; 
     } 
    } 
} 

Questo lascia tutto il codice che ottiene il valore A questo metodo non testato.L'unico modo efficace che ho visto di testare questo è testare l'interfaccia utente direttamente con i telecomandi del browser come Selenium. Lo PHPUnit testing framework dispone di agganci per l'utilizzo del driver PHP di Selenium, il che significa che è possibile utilizzare lo stesso test runner degli altri test di unità.

Non sarai mai sicuro al 100% che un cambiamento innocente non porti i tuoi test al selenio, ma ci sono dei passi da fare durante lo sviluppo per minimizzare questo. Il selenio ha various different ways per "indirizzare" un elemento su cui fare clic o digitare. Si desidera utilizzare il targeting più specifico possibile, quindi provare a dare a tutti i nodi X (HTML) un elemento ID univoco. Ciò garantisce che il selenio farà clic su un collegamento, non importa dove finisce su una pagina.

Quando un ID univoco non è possibile, provare a racchiudere elementi comuni con un elemento HTML che ha un identificatore univoco, quindi utilizzare le opzioni di taratura del xpath del selenio per dire "fai clic sul collegamento che contiene il testo" che si trova nella div con l'id di "foo", o fare clic sul terzo anello nel div con l'ID di "foo".

Se non è evidente dalle voci di cui sopra, non lo fanno si basano sulle scelte di targeting che Selenio IDE (o altri registratori) sceglieranno. Il loro obiettivo è quello di garantire che eseguendo il test su quella pagina esatta si ottengano gli stessi risultati, il che può darti xpath molto fragile. Rivedi sempre i test che registri e correggi il targeting scadente.

Non ci sono risposte facili qui. Se ci fossero, le applicazioni web sarebbero molto meno buggy.

0

Prova SeleniumHQ.org.

Questa è un'estensione del browser che vi permette di registrare i clic, dattilografia e movimenti del mouse, ecc, come una macro. I macro possono essere salvati come test e riprodotti, al fine di testare le app web.

Sembra che essi hanno altre versioni del prodotto anche in grado di eseguire i test con il lancio di altri browser.

0

Non so se la mia risposta sarà utile, perché anch'io ho la stessa domanda.

Ad ogni modo, se non l'hai ancora fatto, prova Windmill, che trovo molto utile, veloce e sporco e funziona nei principali browser.

Modifica un link non cambia il test (nella maggior parte dei casi, credo) =)

3

Si dovrebbe sfogliare questa parte del documentation of SimpleTest e guardare i metodi che hanno per il test

  • contenuto della pagina
  • navigazione
  • cookie
  • immagini
  • cornici
  • modulo di presentazione
  • reindirizza
  • deleghe

Anche se non si finisce per utilizzare SimpleTest, può valere la pena dare un'occhiata.

Per me, la cosa più utile sta testando l'invio di moduli, tra cui ogni parametro in una richiesta GET o POST per ogni forma che è necessario per il funzionamento del sito.

Se si vuole testare un sacco di interfaccia utente o solo piccole aree chiave sta a voi.

+0

oops, grazie per l'errore di battitura – thomasrutter