2011-02-05 18 views
16

Sto provando a migliorare il mio codice scrivendo unit test per il mio codice ActionScript 3 per progetti Flash su cui lavoro, ma sto avendo un ostacolo mentale a capire come gestirlo nel contesto di un programma Flash. Non riesco a capire come gestire cose come addChild e lo stage, così come tutte le elaborazioni asincrone tipiche delle applicazioni Flash (addEventListeners per l'attesa di caricamento delle cose, ecc.). È davvero diverso da qualsiasi altra lingua? Come fa uno sviluppatore a gestire l'ambiente unico di un programma Flash?Test unitario Codice AS3 per Flash

Alcuni chiarimenti:

  • Questo non ha nulla a che fare con Flex, Flex non è coinvolto a tutti.
  • I programmi riguardano solo file di codice AS3 e risorse contenenti FLA.

risposta

10

Ottima domanda. È una sfida scegliere le parti di un progetto da testare: una singola classe o una raccolta di classi o entrambe.

Sebbene i test eseguiti attorno all'interfaccia utente test possano rilevare molti errori di logica e di eventi, l'interfaccia utente è comunemente dove possono accadere molte cose strane. Molti errori in un progetto Flash possono essere dovuti a modalità di interazione utente impreviste: in pratica un beta tester fa qualcosa nell'interfaccia utente che non avresti mai pensato di fare.

Se il tuo progetto è guidato dall'interazione dell'utente, in particolare orientato al gioco e non orientato alla RIA, pianificare una buona sequenza di test è importante quanto i test stessi. Ad esempio, puoi provare l'azione A, quindi l'azione B, sapendo che B dipende da A perché è così che l'hai scritto. Un tester può provare B prima di A, uno scenario che potresti non esserti aspettato e uno che non sarebbe stato catturato se A e B fossero stati testati indipendentemente come unità. Potrebbe anche significare che vorresti scrivere 3 o 4 test: A, B, A-> B e B-> A, così il numero di stati può sfuggire di mano.

Qualcosa da considerare è un framework di test come Flexunit per automatizzare molte delle attività.

Edit: Devo notare che FlexUnit funziona anche per AS3 puro.

+1

+1 per un'ottima risposta. Ho sempre difficoltà a trovare test che coprano tutto ciò che è possibile in un'interfaccia utente. Scrivere test per modelli (prelevare/inviare dati a un server o calcolare i punteggi in background) è molto più semplice. Flexunit ha una curva di apprendimento ripida. Sicuramente suggerirei di guardare a hamcrest-as3, un add-on per flexunit, che ha un po 'più senso nel reparto assert, imo. – epologee

+1

Hai qualche suggerimento per separare l'interfaccia utente dalla logica in un'applicazione Flash? Trovo difficile farlo perché Flash è così ben collegato alla presentazione visiva. – gunit888

6

Mi piace astrarre la logica dell'applicazione dai contenuti di visualizzazione front-end. Non credo che sia molto utile testare l'unità front-end/display, ma è possibile testare la logica interna e la funzionalità del sistema. È il modello di progettazione MVC.

Ad esempio: Supponiamo di avere un gioco Flash in cui è presente un giocatore che può attaccare i nemici. Potresti avere una classe Player, una classe Monster e un metodo Player.attack(monster:Monster).

I test di unità imposteranno i valori in un Player e Monster e chiameranno attack() e quindi si assicureranno che i risultati siano corretti.

Il display di front-end, lo stage, gli oggetti selezionabili, ecc. E l'interfaccia utente effettueranno anche chiamate a questi oggetti quando appropriato in un ambiente live.

Le unit test avrebbero eseguito in un file .swf separato che esegue le prove che importano gli oggetti del modello (Player, Monster, e qualsiasi altra cosa che potrebbe avere), ma completamente ignorare tutti gli elementi visivi/visualizzazione. Eviterei di testare l'unità tutto ciò che riguarda l'interazione dell'utente.

+0

Sto indovinando il mio grande problema è che io tendo ad unire l'interfaccia utente e la logica insieme.Per esempio, spesso inserisco tutto il codice per una classe (animazione visiva e stato e logica) nella stessa classe che l'asset della libreria esporta. Disponi di risorse per l'utilizzo di MVC con esempi Flash? – gunit888