Question

Aux fins des tests unitaires, j'aimerais créer une cible de projet iPhone dans Xcode incluant tous les fichiers de l'application finale, ainsi que des fichiers supplémentaires contenant du code utile pour les tests unitaires de l'interface utilisateur.

Je peux le faire en dupliquant la cible de l'application d'origine; Cependant, le problème est que chaque fois que j'ajoute un nouveau fichier source à la cible de l'application, je dois également l'ajouter à la cible UnitTestUI. Ce n'est pas grave, il est simplement gênant de toujours ajouter des fichiers aux deux cibles.

Existe-t-il un moyen de configurer une dépendance de sorte que chaque fichier ajouté à la cible de l'application d'origine soit également ajouté automatiquement à la cible de test de l'unité?

Était-ce utile?

La solution

Dans Xcode, vous pouvez créer des cibles qui dépendent directement les unes des autres. Un certain nombre de cibles de création de produits autres que les produits peuvent vous aider dans la catégorie Autre lors de l'ajout d'une nouvelle cible, en fonction de la simplicité ou de la complexité de votre configuration. La création de cibles spécifiques pour l'exécution de tests unitaires avec une dépendance directe à la cible principale du projet est très courante et est documentée par Apple et par plusieurs blogs.

Cependant, dans votre cas, vous devrez peut-être peaufiner la nouvelle cible de test de l'interface utilisateur, mais une fois qu'elle sera configurée, elle sera très facile à maintenir. Ne connaissant pas votre situation exacte, il est impossible de vous donner une réponse étape par étape, mais voici les directives générales (modifiez-les en fonction de votre situation):

  1. Créez la copie de votre cible d'origine car la plupart de vos paramètres seront les mêmes.
  2. Sélectionnez votre nouvelle cible et ouvrez l'inspecteur (& # 8984; I)
  3. Sous Dépendances directes , cliquez sur le bouton +, puis sélectionnez votre cible principale.
  4. Configurez la nouvelle cible comme vous le souhaitez, avec une documentation / source / règles supplémentaire ou autre.

Si vous préférez glisser-déposer des objets, vous pouvez également faire glisser votre cible d'origine (située sous le triangle Cibles ) dans votre nouvelle cible. Elle établira automatiquement la dépendance.

Maintenant, sélectionnez votre cible de test en tant que cible active et elle sera toujours construite avec ces règles. De plus, si vous ajoutez / modifiez la source dans la cible principale, elle sera correctement reconstruite lors de la construction de votre cible de test ... inutile de vous rappeler d'ajouter un fichier source à la cible de test également. Je suggère de prendre un peu de temps pour lire les divers documents Xcode et de jouer avec un grand nombre de modèles cibles disponibles ... à long terme, cela rend vraiment l'utilisation du produit beaucoup plus efficace. Beaucoup de choses astucieuses peuvent être faites assez facilement dans Xcode si vous savez comment faire, même avec des projets très volumineux ou complexes.

Autres conseils

Non, il n'y en a pas. Y a-t-il une raison particulière pour laquelle vous souhaitez que chaque fichier soit dans votre cible de test unitaire? Cela inclut main.m et toutes les classes que vous ne testez pas (telles que peut-être vos classes de vue). En fait, si main.m est inclus dans votre test unitaire, comment votre test unitaire fonctionnera-t-il même correctement?

J'ai résolu le problème en construisant la plupart de mes applications en tant que bibliothèque statique, qui est liée à la fois aux cibles de test d'application et d'unités.

Les cibles de mon projet ressemblent à:

  • libMyApp
    • compiler des fichiers .m
  • MyApp.app
    • libMyApp (dépendance)
    • Lien avec la bibliothèque: libMyApp.a
  • UITest.app
    • libMyApp (dépendance)
    • Lien avec la bibliothèque: libMyApp.a

Ainsi, je peux ajouter des fichiers .m uniquement à "libMyApp " ciblez-les et ayez-les disponibles dans l'application et les tests, et ils n'ont même pas besoin d'être recompilés.

Le seul inconvénient est que la bibliothèque statique ne semble pas prendre en charge les catégories Objective-C. Je dois donc les ajouter séparément à chaque cible.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top