Come si suppone che un'unità test i miei controller di visualizzazione (sottoclassi UIViewController) in un'app iOS?Come posso testare i controller di visualizzazione iOS dell'unità?
Ho discusso ampiamente questo argomento negli ultimi due giorni ma non riesco ancora a capire quale sia il modo corretto di farlo.
Sembra che ci sono almeno tre modi di logica vista del regolatore unit testing:
esporre le azioni private e IBOutlets che si desidera test di unità (dichiararle nel file di intestazione).
Utilizzare una categoria, come
Tests
, per accedere a azioni private e IBOutlet dai test di unità.Non esporre nulla, anziché trovare pulsanti e altre visualizzazioni per titolo o un'altra proprietà pubblica e simulare l'interazione dell'utente tramite metodi pubblici di visione UIV (ad esempio, simulare l'utente toccando un pulsante); quindi osserva lo stato visibile.
Non ho trovato molte fonti su questo, ma c'è un esempio su objc.io.
Ora, ad essere onesti, non mi piace molto i primi due perché per quanto ho capito unit test non sono tenuti a testare interni dell'oggetto (vale a dire metodi privati), e dichiarando pubblica solo per il il gusto dei test non sembra la migliore pratica. Di solito mantengo IBActions e IBOutlets all'interno dell'implementazione ma ora devo improvvisamente rendere tutto pubblico solo perché sto aggiungendo test ...
Penso che ci possa essere un'altra alternativa: spostare la maggior logica possibile dal mio punto di vista controllori in componenti indipendenti e testarli invece (lasciando i test non testati o per lo più non testati). Questa mi sembra una buona idea, ma dovrò fare molti refactoring (sto attualmente aggiungendo i test unitari per un progetto che non è stato codificato con i test in mente).
Quindi mi chiedevo, qual è il modo migliore di testare i controller di visualizzazione?
Come si suppone di testare pulsanti e IBAzioni attraverso le categorie? Dichiarare la categoria nel file di test, quindi la funzione, quindi chiamarla? Come faccio quindi a verificare che l'interfaccia utente sia cambiata? – Minimi
Hai inserito IBActions nella categoria in modo da poterli chiamare in test. Per verificare l'interfaccia utente, è possibile controllare la cornice delle viste o utilizzare lo strumento di test dello screenshot come https://github.com/facebook/ios-snapshot-test-case –
Esiste un modo migliore per testare IBActions? Non voglio aggiungere codice al mio modello solo per i casi di test, anche se è solo una categoria inclusa nel target di test. Dovrei anche provare a testare l'unità IBActions? Dovrei utilizzare i test dell'interfaccia utente? – Minimi