Domanda

Ai fini del test unitario, vorrei creare un target del progetto iPhone in Xcode che includesse tutti i file dell'applicazione di rilascio, oltre ad alcuni file aggiuntivi contenenti codice utile per i test unitari dell'interfaccia utente.

Posso farlo duplicando la destinazione originale dell'applicazione; tuttavia, il problema è che ogni volta che aggiungo un nuovo file di origine alla destinazione dell'app, devo aggiungerlo anche alla destinazione UnitTestUI. Non è un grosso problema, solo scomodo ricordare sempre di aggiungere file a entrambi i target.

Esiste un modo per impostare una dipendenza in modo che ogni file aggiunto alla destinazione dell'app originale venga automaticamente aggiunto alla destinazione test unità?

È stato utile?

Soluzione

In Xcode, puoi creare target che hanno dipendenze dirette l'uno con l'altro. Esistono numerosi obiettivi di sviluppo non di prodotto che possono essere di aiuto nella categoria Altro quando si aggiunge un nuovo obiettivo, a seconda di quanto sia semplice o complicata la configurazione. La creazione di obiettivi specifici per l'esecuzione di unit test con una dipendenza diretta dall'obiettivo principale del progetto è molto comune ed è documentata da Apple e da numerosi blog.

Nella tua situazione, tuttavia, potresti dover apportare molte modifiche al nuovo obiettivo di test dell'interfaccia utente, ma una volta impostato, sarà molto facile da mantenere. Non conoscendo la tua situazione esatta, è impossibile darti una risposta dettagliata, ma qui ci sono le linee guida generali (modifica per adattarsi alla tua situazione):

  1. Crea la copia del tuo target originale poiché la maggior parte delle tue impostazioni saranno le stesse.
  2. Seleziona il tuo nuovo obiettivo e apri l'ispettore (?I)
  3. In Dipendenze dirette , fai clic sul pulsante + e seleziona il tuo obiettivo principale.
  4. Imposta il nuovo target come desiderato, con ulteriore documentazione / fonte / regole o altro.

Se preferisci trascinare e rilasciare oggetti in giro, puoi anche trascinare il tuo obiettivo originale (da sotto il triangolo di divulgazione Target ) nel tuo nuovo target e imposterà automaticamente la dipendenza.

Ora, seleziona il tuo target di test come target attivo e costruirà sempre con quelle regole. Inoltre, se aggiungi / modifichi l'origine nella destinazione principale, verrà ricostruito correttamente durante la creazione della destinazione del test ... non è necessario ricordare di aggiungere anche un file sorgente alla destinazione del test. Suggerisco di dedicare un po 'di tempo a leggere i vari documenti Xcode e giocare con molti dei modelli di destinazione disponibili ... a lungo termine, aiuta davvero a rendere l'uso del prodotto molto più efficiente. Ci sono molte cose interessanti che possono essere fatte abbastanza facilmente in Xcode se sai come, anche con progetti molto grandi o complessi.

Altri suggerimenti

No non c'è. C'è un motivo particolare per cui desideri che ogni singolo file nel target del test unitario? Ciò include main.m e tutte le classi che non stai testando (come forse le tue classi di visualizzazione). Infatti, se main.m è incluso nel tuo Unit Test, come funzionerebbe anche il tuo Unit Test?

Ho risolto il problema costruendo la maggior parte della mia applicazione come libreria statica, che è collegata a target di app e unit test.

I target nel mio progetto sembrano:

  • libMyApp
    • compila file .m
  • MyApp.app
    • libMyApp (dipendenza)
    • Collegamento con la libreria: libMyApp.a
  • UITest.app
    • libMyApp (dipendenza)
    • Collegamento con la libreria: libMyApp.a

In questo modo posso aggiungere i file .m solo a " libMyApp " target e li hanno disponibili sia in app che in test, e non devono nemmeno essere ricompilati.

L'unico problema è che la libreria statica non sembra supportare le categorie Objective-C, quindi devo ancora aggiungerle separatamente a ciascuna destinazione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top