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.
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):
Bundle
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.
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.
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.
Veillez à sélectionner None
dans la liste déroulante cible.
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.
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.
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