J'ai récemment mis à jour vers Xcode 7 beta 5. J'ai essayé d'ajouter un test unitaire à un projet antérieur, mais j'obtiens le message d'erreur "No such module [myModuleName]" sur la @testable import myModuleName
ligne.
j'ai essayé
- nettoyage du projet avec OptionClean Build Folder
- vérifier que «Activer la testabilité» (débogage) était défini sur Oui dans les options de construction
- suppression de la cible de tests, puis réajout du bundle de tests unitaires iOS
Rien de tout cela n'a fonctionné pour ce projet (mais j'ai fait des tests pour travailler dans un autre projet). Quelqu'un d'autre a-t-il eu ce problème et l'a-t-il résolu?
ios
xcode
unit-testing
xctest
Suragch
la source
la source
Réponses:
Veuillez vérifier le nom de votre module avec lequel vous essayez d'importer
@testable import "ModuleName"
. Le nom du module doit être le même surTarget->Build Settings-> Product Module Name
la source
space
and_
-
et_
. Un de mes projets a moins-
dans le nom, mais le module a un trait de soulignement à la_
place""
idée et j'ai obtenuExpected identifier in import declaration
Build Settings
sélectionnez votre projet (pas le test ou le test de l'interface utilisateur), puis recherchezPRODUCT_MODULE_NAME
ce qui apparaît ici est ce qui devrait aller après@testable import
La réponse qui a fonctionné pour moi
La réponse était que j'avais des erreurs dans mon projet qui faisaient échouer la construction. (C'était juste votre bogue quotidien standard dans le code.) Après avoir corrigé les erreurs et fait un autre nettoyage et compilation, cela a fonctionné.
Notez que ces erreurs ne sont pas apparues au début. Pour les faire apparaître:
S'il y a d'autres erreurs, elles devraient apparaître maintenant. Corrigez-les, puis décommentez le code de votre fichier de test. L'erreur "No such module" a disparu pour moi.
Si cela ne résout pas le problème pour d'autres personnes, vous pouvez également essayer ce qui suit:
Nettoyer le dossier de construction
Ouvrez le menu Produit, maintenez Optionet cliquez sur "Nettoyer le dossier de construction ..."
Assurez-vous que Activer la testabilité est défini sur Oui
Dans le navigateur de projet, cliquez sur le nom de votre projet. Sélectionnez Paramètres de construction et faites défiler jusqu'à Options de construction. Assurez-vous que Activer la testabilité est Oui (pour le débogage).
Supprimer et rajouter votre cible de tests
Si vous avez fait les autres choses, je suppose que vous n'avez probablement pas besoin de le faire. Mais si vous le faites, n'oubliez pas de sauvegarder tous les tests unitaires que vous avez déjà écrits.
Cliquez sur le nom de votre projet dans le navigateur de projet. Sélectionnez ensuite votre cible de tests. Cliquez sur le bouton moins (-) en bas pour le supprimer.
Cliquez ensuite sur le bouton plus (+) et choisissez iOS Unit Testing Bundle pour l'ajouter à nouveau. Comme vous pouvez le voir, vous pouvez également ajouter un bundle de test d'interface utilisateur de la même manière.
Quelques autres idées
Ou...
Laissez un commentaire ou une réponse ci-dessous si vous avez trouvé quelque chose d'autre qui a fonctionné.
en relation
la source
Le problème pour moi était que la cible de déploiement iOS des tests n'était pas définie pour être la même que la cible principale. Assurez-vous donc de vérifier cela.
Dans votre cible de test:
la source
Enable Bitcode
àNo
sur le faisceau de test.C'est ainsi que j'ai procédé pour faire fonctionner mon code après avoir essayé toutes les solutions suggérées à partir des suggestions précédentes.
Et tout fonctionnait comme du charme. J'espère que cela t'aides.
la source
Un problème à surveiller est que si le nom de votre module contient un tiret,
-
vous devrez vous y référer avec un tiret à la place_
. Pour une raison quelconque, je soupçonnais que cela pourrait être un problème et c'était en effet mon problème.par exemple.
@testable import Ocean-Swift
devient@testable import Ocean_Swift
Juste une autre chose, si vous utilisez la
@testable
syntaxe, assurez-vous de ne pas inclure votre code de production dans votre cible de test. J'ai trouvé que cela causerait une bizarrerie inexplicable.la source
App (Dev)
, le module testable est devenuApp__Dev_
Cela semble être une erreur avec les paramètres de construction des deux cibles. Vous devez vous assurer que:
ENABLE_TESTABILITY
équivaut à Oui pour les deux cibles.PRODUCT_MODULE_NAME
valeur de la cible de test doit différer de celle de l'application.la source
Une autre chose à vérifier: si vous avez un projet Objective-C, mais que vous écrivez des tests unitaires dans Swift, assurez-vous que la cible principale utilise au moins un fichier Swift!
Plus d'informations:
Je travaillais sur un projet Objective-C, mais je voulais écrire des tests unitaires en Swift.
J'ai ajouté un fichier Swift à la cible principale pour générer le fichier ProjectName-Bridging-Header.h nécessaire, écrit mes tests et tout fonctionnait correctement.
Plus tard, j'ai supprimé le fichier Swift parce que je pensais que je n'en avais pas besoin (tout le code de la cible principale est en Objective-C ... je n'écrivais que des tests en Swift).
Je n'ai remarqué un problème que plus tard, après avoir fait un "dossier de construction propre / propre" et le problème "No Such Module" est apparu. Après avoir gratté la tête, j'ai ajouté un nouveau fichier Swift vierge et le problème a disparu.
Je l'ai testé plusieurs fois avec / sans le fichier Swift, et cela ne fonctionne qu'avec lui ... donc, je devrai soit laisser le fichier vide dans le projet, convertir une partie d'Objective-C en Swift, soit en ajouter nouveau code du projet écrit en Swift.
la source
@testable import Foo
ligne, vos tests unitaires devraient s'exécuter correctement.Pour ceux qui ont fait défiler jusqu'à la dernière réponse et toujours rien n'a fonctionné, voici ce qui l'a fait pour moi après avoir suivi tous les autres conseils de réponses. J'utilise Xcode 11:
Ce qui a causé le problème dans mon cas, c'est que j'ai changé le nom de mon produit
Je ne savais pas que changer le nom du produit changerait également le nom du module produit , c'est-à-dire celui utilisé pour l'importation du module dans mes fichiers de test. J'ai changé mon import comme suit:
@testable import New_Name
Ça a marché
J'espère que ça aide
la source
Après avoir passé quelques jours sur ces questions, je parviens enfin à travailler avec mon projet. Le problème était dans l'en-tête de pont - le chemin dans la cible Tests ne peut pas être vide si vous utilisez l'en-tête de pont dans votre cible principale
J'espère que cela fera gagner du temps à quelqu'un.
la source
Assurez-vous que sous le paramètre de construction du schéma de test, la cible de test est dans la liste.
À côté du bouton de lecture, sélectionnez le schéma de test, puis Modifier le schéma ..., allez dans la section Construire, cliquez sur plus + et sélectionnez la cible que vous souhaitez tester.
Dans mon cas, nous avons une cible interne avec laquelle nous développons (quelques différences mineures) et après une fusion, elle a été supprimée de la configuration de test.
la source
Voici encore une autre chose à vérifier qui n'est pas répertoriée. Pour moi, cela avait quelque chose à voir avec mon équipe, peut-être parce que l'agent de notre équipe n'avait pas encore accepté le dernier accord de licence! Une fois que j'ai sélectionné une équipe différente dans les paramètres généraux de ma cible, ET ensuite j'ai spécifié une cible de déploiement spécifique telle que 12.1 ou 11.0, l'avertissement "No Such Module" a soudainement disparu.
la source
Dans mon cas, j'ai eu 3 problèmes. La première était que je devais spécifier le chemin d'importation dans:
La seconde était que j'utilisais des pods et que je devais également importer ces pods dans mes tests en utilisant:
Le troisième étant que j'utilisais un en-tête de pontage dans ma cible, j'ai donc dû spécifier l'en-tête de pontage pour qu'il soit le même pour le test.
la source
Mon problème était que la classe que je voulais tester était censée être dans un module séparé (client API), mais la classe était en fait un membre de la cible de l'application et non de la cible du framework. La modification de l'appartenance cible de la classe a fait disparaître l'erreur d'importation!
la source
Environnement: Xcode Version 9.0 (9A235)
Scénario: Test d'un framework open-source.
J'ai eu le même problème: «No such module».
Solution:
Voici le fichier de test:
la source
J'ai eu ce même problème. Le nettoyage du dossier de construction et le redémarrage de Xcode n'ont pas fonctionné.
Ce qui a fonctionné pour moi, c'est de m'assurer que le paramètre "Créer une architecture active uniquement" de votre cible de test et de votre schéma correspond au paramètre de la cible et du schéma de votre application.
la source
J'ai suivi les étapes ci-dessus, qui ont fonctionné. Cependant, mon projet avait quelques problèmes supplémentaires. J'ai reçu cet avertissement et je n'ai pas pu accéder aux classes de mon projet principal à tester dans ma cible de test.
J'ai trouvé que le nom de votre module de produit cible de test (YourTestTarget -> Build Settings -> search for
product module
) ne peut pas être le même nom que le nom de votre projet.Une fois que j'ai changé le nom du module de produit pour ma cible de test, tout a fonctionné.
la source
J'ai essayé toutes les réponses ici mais le drapeau rouge ne disparaîtrait pas. Mais je l'ai fait fonctionner en "exécutant" un test vide de toute façon et il s'est éclairci.
Les choses que je voudrais m'assurer sont faites:
la source
Pour moi, la solution était de renommer @testable import myproject_ios en @testable import myproject après avoir mis à jour le nom du produit de la cible myproject-ios dans Build Settings / Packaging / Product Name / de $ {TARGET_NAME} à myproject.
la source
Ce problème a été résolu pour moi lorsque j'ai changé la cible de déploiement de 9.3 à 11.0.
Général> Cible de déploiement> "11.0"
la source
Ma solution est ici.
Tout d'abord, cliquez sur OdeAlSwiftUITest.swift, puis vérifiez Project TargetName dans l'appartenance cible.
la source
Si vous utilisez xcodebuild et trouvez ce problème, envisagez d'ajouter un indicateur d'espace de travail à la commande build.
Cela a changé
Pour ça
la source
Dans la cible de test des paramètres de build, vérifiez le test de l'hôte, il prend le nom défini dans PRODUCT_NAME. C'est ce nom que vous devez utiliser dans les classes de test.
Je recommande de ne pas changer PRODUCT_NAME (correspond au nom de la cible principale)
la source
Cliquez sur MyAppTests.swift dans le navigateur de projet, puis cliquez sur le panneau de droite, vérifiez votre module dans l'appartenance cible. Cela fonctionne dans le mien.
la source
CocoaPods recommande d'ajouter
inherit! :search_paths
à votre cible de test comme ceci:Source: https://github.com/CocoaPods/CocoaPods/pull/8423#issue-244992565
la source
Comme décrit dans cette réponse, j'ajoutais des tests Swift à un projet Obj-C uniquement. La solution était d'ajouter une classe Swift factice, après quoi Xcode inviterait à ajouter un en-tête de pontage, puis supprimait la classe Swift. Tout allait bien après ça.
la source
J'ai ajouté aux autres choses énumérées, j'ai dû ajouter le fichier avec la classe que j'essayais de tester à mes sources de compilation pour le module de test unitaire
la source
Je pense que cela peut être arrivé parce que j'ai supprimé les exemples de tests.
J'ai supprimé le bundle de test unitaire, puis l'ai ré-ajouté comme indiqué dans les images ci-dessous et tout allait bien à nouveau.
la source