2010-09-30 1 views
10

Mi sono preso il tempo di impostare alcuni test unitari e impostare gli obiettivi in ​​XCode, ecc., E sono abbastanza utili per alcune classi. Tuttavia:Il test delle unità è meraviglioso, ma

Voglio testare piccoli elementi dell'interfaccia utente per cui I non si desidera avviare l'intera applicazione. Non c'è alcun concetto di pass/fail: ho bisogno di "vedere" i pezzi, e posso fare istanze fittizie di tutte le classi rilevanti per farlo. La mia domanda è: come posso configurarlo in XCode?

Mi rendo conto che potrei usare un altro progetto XCode per ogni classe (o gruppi di classi), ma questo sembra un po 'macchinoso. Un altro obiettivo per ciascuno?

risposta

5

Bene, non è possibile chiamare mostrando una parte della GUI un test anche se la GUI fa parte di un'applicazione di grandi dimensioni. Quello che puoi fare qui è creare un target eseguibile separato e scrivere un piccolo strumento che riutilizza i componenti della GUI dall'applicazione e li mostra in base ai parametri di input. Ciò eliminerà la necessità di molti molti obiettivi diversi.

Se si continua a utilizzare i test di unità, è possibile mostrare la GUI per un certo periodo di tempo, ad esempio 10 secondi. Quindi, il test case verrà eseguito fino a quando la GUI non sarà chiusa o il timeout trascorrerà e ogni test impiegherà fino a N secondi per essere eseguito.

+0

Grazie, non sono stato "testato". Quindi questi sono nuovi obiettivi nello stesso progetto XCode o in uno diverso? –

+0

@ Yar: È più una questione di preferenze personali. Mantenerlo nello stesso progetto è più conveniente per me. –

2

Questa è una buona domanda. Penso che in realtà non vuoi usare i test unitari per quelle "conferme visive". Personalmente di solito scrivo piccole app di test per fare questo tipo di test o sviluppo. Non mi piacciono i target separati nello stesso progetto, quindi di solito creo un progetto di test accanto a quello originale e quindi riferimento a tali classi e risorse utilizzando percorsi relativi. Meno confusione. Ed è davvero bello poter testare elementi di interfaccia utente più complessi nel loro piccolo ambiente di test.

+0

Interessante ... Stavo pensando a progetti separati XCode, volevo solo essere sicuro che fossi sano :) –

2

Vorrei adottare un approccio a due livelli di interfaccia utente "unit test":

  1. nche se Cocoa/Cocoa Touch sono ancora più vicino al Model-View-Controller che il paradigma Model-View-ViewModel, è può ottenere gran parte del vantaggio della testabilità suddividendo la tua "Vista" in una "vista modello" e una vista "presentatore" (nota che questo è un po 'sulla falsariga della coppia NSView/NSCell, gli ingegneri di Cocoa avevano questo tempo fa). Se la vista è un livello di presentazione semplice, è possibile testare il comportamento della vista per unità testando il "modello di vista".

  2. Per testare il disegno/rendering delle viste, è necessario eseguire test umani o eseguire test basati su rendering/pixel. Google's Toolbox for Mac ha diversi strumenti per fare un confronto pixel per pixel di NSViews, CALayers, UIViews, ecc. Ho scritto un tool per il progetto Core Plot per far fronte agli errori di test e unire i file di riferimento nel test dell'unità raggruppare un piccolo più facile.

+0

http://developer.apple.com/tools/unittest.html –

12

So che siete alla ricerca di un approccio ai componenti dell'interfaccia utente di test che non richiede un'applicazione completamente funzionale, ma sono stato impressionato con ciò che il nuovo strumento di automazione interfaccia utente introdotto in iOS 4.0 consente di fare.

Questo strumento consente di utilizzare script Javascript per testare interattivamente l'interfaccia dell'applicazione e lo fa in un modo che non richiede il controllo di valori o posizioni di pixel esatti su uno schermo. Utilizza i ganci di accessibilità incorporati presenti nel sistema affinché VoiceOver possa identificare e interagire con i componenti.

Utilizzando questo strumento, sono stato in grado di eseguire test di script che esercitano completamente la mia applicazione come un utente che interagirebbe con esso, così come quelli che martellano su aree particolari e cercano sottili accumuli di memoria.

La documentazione su questa parte di Strumenti è un po 'scarsa, ma recentemente ho insegnato una lezione che copre l'argomento per il quale il video è available on iTunes U gratuitamente (cercare la classe Testing nel semestre autunnale). Il mio course notes (nel formato VoodooPad) copre anche questo. Raccomando inoltre vivamente di guardare la sessione WWDC 2010 video 306 - "Automatizzare il test dell'interfaccia utente con gli strumenti".

+0

A volte mi chiedo perché faccio tante domande su SO, ma una volta ogni tanto ottengo una risposta come questa che apre una porta che non ho Neppure so. Grazie per questo. –

+0

+1. Questa è una fantastica informazione! –