2015-09-29 18 views
8

Desidero aggiungere oggetti fittizi per il test nel progetto, ma non voglio che vengano inclusi nella mia build finale. Così ho la mia classe AppDelegate e là delle importazioni:Aggiunta di oggetti fittizi al progetto

#ifdef TESTING 
#import "DummyBeaconLocationManager.h" 
#else 
#import "BeaconLocationManager.h" 
#endif 

E più tardi:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
... 
#ifdef TESTING 
    [[DummyBeaconLocationManager sharedInstance] startRanging]; 
#else 
    self.beaconLocationManager = [BeaconLocationManager sharedInstance]; 
    [self.beaconLocationManager startRanging]; 
#endif 
    return YES; 
} 

Ma il problema è che ho includere questo nel mio Target Membership, non il mio target di test. C'è un modo per non includere questi file nel mio target principale, ma solo nel target Test?

Modifica: Che cosa è necessario fare è testare la mia app dopo il lancio. Voglio testarlo su simulatore ma app usando i beacon. Così ho creato oggetti fittizi che rappresentano beacon e simulare il gestore di posizione. Quando l'app inizia con l'opzione TESTING, non inizia il range beacon ma inserisce invece un oggetto fittizio come beacon.

+0

non spiegate il motivo per cui è necessario l'oggetto di prova creata nella vostra app delegato quindi non sono sicuro se questo aiuterà, ma potrebbe così: http://qualitycoding.org/app-delegate-for-tests/ –

+1

Potresti fare un target specifico per i tuoi build di test? –

+0

Non capisco - obiettivo di test esegue ancora i metodi AppDelegate giusto? Ho un obiettivo di prova ma l'app deve lanciare in qualche modo – Kuba

risposta

7

Una volta seguiti questi passaggi, sarà possibile aggiungere classi di test con funzionalità di test alla build. Per eseguire l'app utilizzando la funzionalità di test, è necessario selezionare lo schema di test configurato di seguito.

Xcode Configurazione del progetto (usando Xcode 7.0.1)

Per consentire le importazioni e le funzionalità condizionali per essere efficace per i test, sono necessari i seguenti ingredienti:

  1. test di configurazione
  2. test di destinazione
  3. programma di test

breve a fornire i chiarimenti nazione di Schemi, Targets e Build Configurations

  • Gli schemi puntano a target e configurazioni.
  • I target possono essere configurati con diverse impostazioni di compilazione.
  • È possibile aggiungere configurazioni, per diramare le impostazioni di generazione del target.

Ecco i passaggi:

1. Duplicare una configurazione per testare

Con il file di progetto selezionato nel Navigatore progetto, procedere come segue:

  1. selezionare il destinazione del progetto
  2. Seleziona Info
  3. Selezionare + per aggiungere una configurazione

Duplicate a project configuration

  1. Selezionare Duplica configurazione "Debug" Duplicate "Debug" Configuration

  2. Rinominare la nuova configurazione, e trascinarlo riordino Rename project configuration and drag to re-order

2. Duplicare una destinazione per il test

Ora che si dispone di una configurazione di test, aggiungere un obiettivo di test. Con il file di progetto selezionare nella navigazione di progetto, attenersi alla seguente procedura:

  1. destro del mouse o il tasto Opzione un target esistente e selezionare Duplica. Duplicate an existing target

  2. Toccare il nuovo obiettivo per rinominarlo, quindi trascinarlo per riordinare i target. Rename and drag new target

3. Gestire schemi

Ora che avete un obiettivo di test e la configurazione, si è pronti per aggiungere uno schema che punta al nuovo obiettivo e la configurazione.

  1. Toccare gli schemi (accanto al pulsante di arresto), e selezionare Gestisci schemi ... Select Manage Schemes...

  2. negli schemi direttore pop-up, se si è scelto di autocreate schemi, il nuovo regime sarà già elencato. Altrimenti, puoi toccare + nel popup per aggiungere uno schema. Ogni schema può essere condiviso, come illustrato di seguito: Configure new scheme

  3. Toccare il nuovo schema di rinominarlo, e trascinarlo per riordinare: Rename and reorder schemes

  4. Per modificare il nuovo schema, assicurarsi che sia selezionata e tocca Modifica ... Edit scheme

  5. Nel riquadro di modifica, selezionare la configurazione di prova accumulo Select Testing build configuration

  6. Assicurarsi che i punti di regime alla destinazione test, toccando l'eseguibile discesa: Point to Testing Target for Run action

  7. Assicurarsi che lo schema indichi la configurazione di build corretta, per altre azioni, ad esempio Test automatico: Point to Testing Target for Test action

4. Configurare le impostazioni di generazione per i vostri obiettivi

Ora che avete il vostro programma di prove istituito per puntare alla configurazione di prova, si comporterà esattamente come la configurazione di debug, fino a quando si modifica la build impostazioni. Attenersi alla seguente procedura per modificare le impostazioni di generazione per la configurazione di prova:

  1. Per la maggior parte delle impostazioni di generazione, è disponibile un'opzione per ciascuna configurazione. Al momento di scegliere la configurazione da utilizzare nelle impostazioni, verificare che sia selezionata l'obiettivo principale: Select main target

  2. il preprocessore macro sono nella sezione intitolata 'di Apple LLVM 7.0 - Pre-elaborazione': Preprocessor Macros

  3. Tap su un riga, per selezionarlo, toccare il tasto Invio per modificare e confermare le modifiche, utilizzare i tasti freccia per spostarsi verso l'alto o verso il basso. Si tratta di una buona pratica per definire tutte le macro del preprocessore per tutte le configurazioni, in questo modo: Define preprocessor macros

5. Aggiungere una classe al vostro target Testing

Ora, i punti di test schema per un configurazione che si comporta diversamente dalla configurazione di Debug. Ora dovresti essere in grado di selezionare lo schema di test dal menu a discesa degli schemi ed eseguire la configurazione di test.

È possibile modificare l'appartenenza di destinazione di una classe in uno dei due modi.

  1. Quando si crea un nuovo file, il terzo pannello in cui è possibile scegliere la posizione, ha opzioni in fondo, per ciascun target:

Choose target membership

  1. Quando si seleziona un file nel Navigatore progetto, l'ispettore file ha un pannello di iscrizione di destinazione in cui è possibile apportare modifiche: Modify target membership

Schemi

Gli schemi sono generalmente associati per creare configurazioni. Una buona pratica è avere uno schema/configurazione per ciascun pubblico che necessita di una versione diversa della build.Qui ci sono alcuni segmenti di pubblico di base che in genere necessitano di configurazioni separate:

  • sviluppatore> DEBUG
  • sviluppatore> COLLAUDO
  • test interno> SVILUPPO
  • Beta Testers/Produzione> APP STORE

Subclassing

Se si desidera modificare qualsiasi funzionalità in modalità test, è possibile utilizzare un sottoclasse e aggiungi solo la sottoclasse alla tua destinazione di prova.

0

Va bene, se ho capito bene, si dovrebbe:

  • a) Creare un obiettivo separato per porposes di test (come @Carl Veazey e @Rainer Schwarze suggeriscono) con quasi lo stesso codice di base come la vostra obiettivo principale .
  • b) consiglierei beffardo vostra location manager e Beacon
    oggetti tramite sottoclassi da BeaconLocationManager e YourBeacon
    (per esempio). Quindi, basta ignorare il comportamento reale con le azioni specifiche del simulatore .

Alla fine della giornata, il target di test conterrà solo altre 2 classi (mock beacon manager e mock beacon) confrontando l'obiettivo principale. Non sono state apportate ulteriori modifiche alla struttura del progetto o alla semantica del codice. In bocca al lupo.

0

ho potuto variare facilmente sbagliarmi su questo, ma sto indovinando questo potrebbe funzionare:

Come quando utilizza cocoapods, quando si crea il file pod di deselezionare il bersaglio (nome del progetto). E se lo fai, quindi selezionare la destinazione (Progetto NameTests)

enter image description here

+1

Se non è incluso nel target principale non è possibile utilizzarlo nel target principale, ergo non è possibile definire un comportamento diverso per target di test e target principale – Kuba

+0

@Kuba. Ok, questo ha senso. Pensavo ci dovesse essere qualcosa di sbagliato in questo. –

Problemi correlati