Domanda

Qual è il modo migliore per testare il codice GWT?

GWTTestCase in modalità host è troppo lento e nessuno dei framework di simulazione funziona.

Attualmente stiamo seguendo MVC come suggerito in http://robvanmaris.jteam.nl/2008/03/09/test-driven-development-for-gwt-ui-code/ e usando GWTMockUtilities disarm () e restore () per deridere widget . E non abbiamo ancora escogitato un modo per testare View in GWT MVC. Esiste un modo migliore per testare il codice GWT?

È stato utile?

Soluzione

Se stai cercando di testare i widget GWT da solo, non ci sono molte opzioni. Puoi utilizzare un GWTTestCase per creare un'istanza dei tuoi widget e testarlo tramite la sua API, che è ciò che Google fa per i widget GWT stessi: Fonte per RadioButtonTest

Tuttavia, il meccanismo di attivazione degli eventi non funziona in GWTTestCases, il che significa che non puoi fare cose come fare clic programmaticamente su un pulsante e aspettarti che un metodo di callback onClick () venga invocato su un listener. È anche difficile, se non impossibile, accedere al DOM sottostante, quindi potrebbe non essere lo strumento migliore per testare codice di livello HTML che emette basso livello.

Sembra che tu stia seguendo tutti i passi giusti; L'articolo di Rob fornisce un'eccellente descrizione di come scrivere codice testabile usando il modello di progettazione Model-View-Presenter (MVP). Più logica tieni fuori dal livello di visualizzazione, meglio è. Quando ciò non è possibile, utilizzare uno strumento come il selenio per creare test mirati sul comportamento dinamico dell'interfaccia utente.

Ho seguito una strategia simile: MVP con codice minimo nei widget. In alcuni casi ho scritto del codice che avrebbe racchiuso la classe Grid, quindi sono stato in grado di creare un'istanza del mio componente in un GWTTestCase, passare un Grid, invocare alcuni metodi sul mio componente e controllare lo stato della griglia. Ho scritto un articolo per Better Software su Test-First GWT, che puoi leggere sul mio blog .

Se stai cercando di testare il codice che utilizza classi GWT non UI (come la codifica URL o i dizionari), dovrai utilizzare GWTTestCase, oppure seguire strategie di wrapping simili fino a quando il codice non è troppo semplice da infrangere. Quindi utilizza un test di integrazione con uno strumento come il selenio o alcuni GWTTestCase mirati che testano solo che stai utilizzando correttamente la libreria, come dice J.B. Rainsberger, " Non testare il framework! & Quot;

Altri suggerimenti

Come alternativa, dovresti provare gwt-test-utils , che riescono a eseguire il codice client GWT in una JVM autonoma e fornisce alcune funzionalità per deridere tutto ciò che desideri (componente, servizi RPC, ecc.)

Cosa ha funzionato per me:

Utilizza il modello / vista / controller classico (ad es. nessuna logica aziendale nella vista o nel controller; i controller traducono solo gli eventi di visualizzazione in chiamate di metodo sul modello).

Disaccoppia il codice del modello e del controller dai widget della vista GWT e da tutte le altre classi che si basano su GWT e non possono essere istanziate in una vecchia JVM semplice. Puoi quindi provarli con la buona vecchia JUnit.

Scrivi test end-to-end per testare il sistema attraverso la GUI per assicurarti che i modelli e i controller siano collegati correttamente alle viste. Abbiamo trovato più veloce distribuire e avviare l'app e quindi interagire con essa tramite un browser controllato da JUnit con WebDriver che utilizzare GWTTestCase!

Usa JMock per testare chiamate asincrone come questa: http://www.jmock.org/gwt. html .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top