web-dev-qa-db-fra.com

Tests unitaires XCode 5: démarre mon application

Lorsque j'exécute mes tests dans XCode 5, la fenêtre principale de mon application OS X apparaît à l'écran pendant quelques secondes pendant l'exécution des tests. Pourquoi? Même si je supprime tous mes tests, cela ouvre toujours ma fenêtre principale.

32
dhrm

Vous exécutez un test d'application, pas un test de logique. Cela signifie qu'une instance de votre application va être démarrée et ensuite exécuter les tests unitaires. Cela vous permet d'effectuer des tests d'intégration nécessitant l'exécution de votre application.

Ici est le guide pour configurer le test d'application et le test logique.

Si vous souhaitez le modifier en test logique (pour que l'exécution soit plus rapide et qu'il ne soit pas nécessaire de démarrer votre application en premier):

  1. allez créer les paramètres pour votre cible de test unitaire
  2. recherche Bundle
  3. supprimer Bundle Loader et Test Host

enter image description here

37
Bryan Chen

C’est vrai, vous devez supprimer le "Bundle Loader" et le "Test Host" de vos paramètres de construction. 

Mais vous devez ajouter les fichiers d'implémentation nécessaires à votre cible de test unitaire. Les fichiers nécessaires correspondent à ce que vous souhaitez utiliser dans vos cas de test unitaires. Vous devez le faire car, dans les tests logiques, XCode ne compilera pas l’ensemble de l’application. Donc, certains de vos fichiers seront manquants.

Ceci est un message d'erreur si vous avez omis un fichier:

Undefined symbols for architecture i386:
  "_OBJC_CLASS_$_Module", referenced from:
      objc-class-ref in Lobic Network.o
      objc-class-ref in Logic_Unit.o
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Vous pouvez ajouter les fichiers manquants en sélectionnant le fichier d'implémentation et en ouvrant l'inspecteur de fichiers. Il y aura une section nommée "Adhésion cible" et vous pourrez y définir les fichiers d’appartenance à votre test unitaire. 

10
Szasza

Avec XCTest, les fichiers d’application NE PAS doivent être inclus dans les cibles XCTest. Le bundle XCTest est lié à l’application, ce qui rend ces fichiers disponibles pendant l’exécution. 

Pour que cela fonctionne, assurez-vous que l'option du compilateur "Symboles masqués par défaut}" est définie sur NO dans la cible de l'application.

Voici un article de blog avec des captures d'écran pour plus de clarté: http://zmcartor.github.io/code/2014/02/24/slim-xctest-targets

L'avantage de cette approche est que la cible de test se construit beaucoup plus rapidement.

9
HackaZach

Si les tests concernent du code pouvant être exécuté sur des ordinateurs de bureau et mobiles, vous pouvez les exécuter sans simulateur ni les héberger dans votre application. 

Le problème est que vous ne pouvez pas utiliser le sélecteur de schéma pour votre cible normale (ordinateur de bureau ou iOS) pour exécuter le test.

Ce qui suit a fonctionné pour moi dans Xcode6.

File > New Target...

Sélectionnez Cocoa Testing Bundle dans la catégorie OS X.

enter image description here

Veillez à sélectionner None dans la liste déroulante cible.

Specify new test target

Cliquez sur Terminer. Ajoutez les fichiers pertinents à la nouvelle cible, comme décrit ci-dessus.

Créez maintenant un schéma pour exécuter le test.

Cliquez sur le sélecteur de régimes en haut à droite et choisissez New Scheme..., cliquez sur le menu déroulant et parcourez la liste jusqu'à la nouvelle cible. Vous pouvez maintenant choisir le schéma dans le sélecteur de schémas et utiliser ⌘U pour exécuter les tests.

enter image description here

2
Sez

Je viens de perdre une matinée à ce sujet.

Le projet a été créé en XCode 4 et utilise SenTesting.

Essais de migration des tests sur XCode 5/XCTTest

Avait le même problème - L’application a été exécutée dans le simulateur et le test n’a jamais commencé

abandonné créé un projet XCode 5 propre.

Ajout de tous mes fichiers et les tests ont fonctionné correctement.

Il peut encore y avoir des problèmes avec Storyboard car ceux-ci ont été construits avec XCode 4.

Drastique mais ça marche alors gardez-le en dernier recours.

1
brian.clear

Sur XCode5, l'application démarre. Cette réponse montre comment changer de délégué lors de l'exécution de tests unitaires afin qu'il se termine immédiatement: https://stackoverflow.com/a/20588035/239408

1
xverges