2009-11-23 20 views
5

È possibile separare i componenti di un'applicazione IceFaces in modo che possano essere testati in isolamento anziché utilizzare qualcosa come Selenium o HttpUnit sull'applicazione assemblata?Unit test icefaces

I bean di backing possono essere facilmente isolati (se scritti per essere testabili) ma sono interessato a testare le parti template/display dell'applicazione mentre si utilizza il meno possibile dell'applicazione. Può essere fatto? Come?

C'è un modo per rendere un oggetto IceFaces come testo utilizzando "dati fittizi" che posso quindi eseguire attraverso i test unitari tradizionali?

Posso pensare a modi per fare tutto questo, ma implicano la creazione di più applicazioni (una per ogni componente che voglio testare). Tuttavia, questo sembra un modo sub-ottimale di fare le cose.

+1

Per tutti gli aspiranti progettisti di framework ... si prega di considerare il modo migliore per assecondare i test durante la fase di progettazione. :-P –

+0

Amen a quello! È sicuramente un vincolo progettuale da prendere in considerazione. – Ryan

risposta

1

Se ho capito bene la tua domanda, allora dovrebbe essere una semplice questione di creare speciali bean backing per le tue pagine, e quindi creare un test File di configurazione JSF che associa questi bean ai file .jspx. I bean fittizi, ovviamente, non toccheranno alcuna logica di business o servizi back-end: saranno semplicemente semplici set di dati che saranno facilmente verificabili nei test.

Creare uno script ant per sostituire nei bean di backup fittizi e il file di configurazione di test. Esegui i tuoi test. Se non vuoi qualcosa di pesante come HTTPUnit, e se stai usando Spring nella tua app, guarda a this blog post per un ottimo modo per creare un contesto web completo senza un server web. Probabilmente i tuoi test dovranno annusare l'output HTML non elaborato per verificare i risultati.Questo sarà complicato, perché IceFaces ama munge ID DIV e altre parti rilevanti dell'albero DOM che potresti voler annusare. (Questo solo potrebbe essere il motivo per cui pochissimi sviluppatori JSF provano a testare l'output JSF.)

Una volta verificati i test, scambiare i normali bean e il file di configurazione nell'app.

Voilà! Hai appena testato unitamente i componenti JSF.

Intendiamoci, l'intero business di scambiare i bean e file di configurazione è disordinato. Sarebbe molto, molto più semplice se IceFaces utilizzasse Spring per abbinare i bean di supporto alle pagine JSF, quindi sarebbe sufficiente definire i bean di prova in un file application.xml con le relative classi di test. Ma questa è la vita.

Buona fortuna, e fammi sapere come funziona per voi!

1

Questo non è esattamente ciò che si sta chiedendo, ma JSFUnit (che utilizza JUnit, Cactus, HtmlUnit e HttpUnit) sembra essere un candidato serio per i test nella terra JSF. Hai preso in considerazione questa opzione? Magari dai un'occhiata allo JSFUnit Wiki e al suo Getting Started Guide.

Si prega di notare che la FAQ sta segnalando alcuni problemi con IceFaces ma il suo piuttosto vecchia (inizio 2009) e la situazione potrebbe essere cambiata da allora (ci sono alcuni progetti dimostrativi come jboss-jsfunit-examples-icefaces o icefaces-demo-address in repository JBoss quindi potrebbe essere la pena di chiedere lo stato esatto nelle mailing list JSFUnit o IceFaces).

MODIFICA: Come menzionato in un commento, l'OP sta cercando qualcosa di meno "di alto livello". Forse hanno uno sguardo al Shale Test Framework:

Il framework di test Shale fornisce finte librerie di oggetti, oltre a classi di base per creare il proprio JUnit TestCase s.

oggetti Mock sono forniti nel pacchetto org.apache.shale.test.mock per le seguenti API container:

  • JavaServer Faces
  • Servlet

responsabilità: Apache Shale si trasferì nel Attic maggio 2009 (cioè ha raggiunto la fine della sua vita) ma non conosco nessun altro finto framework "maturo" per JSF quindi sono menzionandolo comunque (il codice è ancora lì). Seguirò questa discussione con un interesse molto alto per altre soluzioni :)

+0

Sì, l'ho guardato. Purtroppo questo è troppo "di alto livello" per i miei bisogni. Voglio testare ogni pezzo in isolamento invece dell'intero stack, come fa JSFUnit. – Ryan