2016-07-12 32 views
5

Ho un'app con un sistema di accesso, quindi una volta che l'utente ha effettuato l'accesso all'app, memorizzo la loro sessione in un DB locale, che impedisce agli utenti di accedere ogni volta che usano l'app. Ovviamente, se gli utenti non hanno effettuato l'accesso, l'app visualizza uno LoginViewController, ma se l'app rileva una sessione corrente per l'utente, viene visualizzato un numero HomeViewController.Test UI Xcode con sistema di login

Ho creato alcuni test per il mio HomeViewController e funzionano tutti bene. Tuttavia, ho capito che stanno funzionando bene perché l'app ha attualmente una sessione memorizzata. Se accedo all'app e logout l'utente corrente, quando eseguo i test dell'interfaccia utente falliranno. Questo ha senso, dal momento che il test si aspetta che venga visualizzato uno HomeViewController e che venga visualizzato lo LoginViewController.

Considerando che vorrei anche creare test dell'interfaccia utente per lo LoginViewController, sembra ragionevole creare una soluzione in cui, in ciascun test, viene impostato se l'utente è connesso o meno. Come posso farlo?

risposta

2

Dopo alcune ricerche, ha trovato la risposta a XCUIApplication avviare argomenti/ambienti. Ciò consente di inviare determinate configurazioni durante l'esecuzione del test che può essere interpretato in seguito dal codice principale.

per il mio caso al lavoro, ho messo il seguente codice:

// UI Test 
func testWelcomeIsShown() { 
    let app = XCUIApplication() 
    app.launchArguments.append("isUITestingLogin") 
    app.launch() 
    // Rest of your test steps 
} 

// AppDelegate or wherever you fetch your current session 
func getCurrentSession() { 
    if NSProcessInfo.processInfo().arguments.contains("isUITestingLogin") { 
     session = nil 
    } else { 
     session = DatabaseManager.getSession() 
    } 
} 

Nota: Questo codice funzionerà per la registrazione e l'esecuzione di test. Tuttavia, se si eseguono più test con la stessa logica, probabilmente spostare le prime 3 righe di testWelcomeIsShown() nella classe di test setUp(). Tuttavia, è importante ricordare che questa configurazione non viene eseguita durante la registrazione del test, quindi è necessario impostare manualmente un ambiente di sessione assente.

1

In alternativa è possibile utilizzare SBTUITestTunnel che, tra le altre cose, consente di caricare un file dalla destinazione di prova alla sandbox dell'applicazione. Dovrebbe essere sufficiente per preparare un DB con informazioni di login precompilate che poi vengono inviate al target delle app all'avvio.

La bellezza della libreria è che il codice dell'app non è inquinato con il codice di prova.