Sono ancora abbastanza nuovo alla programmazione, ma la mia prima app è stata recentemente approvata ed è ora in vendita su App Store. La mia app utilizza Core Data ed è scritta in Swift. Dopo alcune difficoltà iniziali, decido di scrivere l'app senza test unitari. Ora vorrei implementare i test unitari per prevenire la regressione.
I miei oggetti gestiti sono creati all'interno di metodi di classe nelle mie sottoclassi NSManagedObject
e usano una variabile globale "contesto" che dichiaro in AppDelegate
per memorizzare NSManagedObjectContext
creata nel codice predefinito di Apple. So che le variabili globali sono generalmente scoraggiate, ma questo approccio ha più senso per me, è facile da scrivere e non ha lasciato alcun bug o altri problemi all'interno della stessa app. Sfortunatamente, questo rende difficile il test dell'unità. Ho provato diversi approcci alla creazione di uno stack di Core Data all'interno del mio target di test, ma non riesco a ottenere nulla da lavorare senza riscrivere un sacco di codice della mia app. Non voglio davvero farlo solo per renderlo testabile. Ho preso in considerazione l'utilizzo di framework come Quick / Nimble o Magical Record, ma non vedo come ciò possa aiutare il mio problema.
Ho trovato una soluzione alternativa, ma sono curioso che la gente pensi che sia una cattiva idea: ho creato una classe nel mio obiettivo principale (non test) chiamato TestingClass
. Nel mio primo ViewController
viewDidAppear
, chiamo il metodo startTests
. TestingClass
è scritto in stretto Swift senza quadri di test. Ho diverse affermazioni che dovrebbero essere false. Se sono veri, aggiungono una stringa a un array. Al termine dei test, se il numero di array è > 0, stampa i contenuti e interrompe.
Sto pensando di usarlo fino a quando il mio aggiornamento è pronto per la spedizione. Quando lo è, disabiliterò TestingClass
e rimuoverò la mia chiamata. Sono curioso di sapere se qualcuno ha mai fatto qualcosa del genere. Dovrei solo capire un modo per fare i test il modo "giusto"?