J'ai récemment mis à jour Xcode 7 beta 5. J'ai essayé d'ajouter un test unitaire à un projet précédent, mais le message d'erreur "Aucun module [myModuleName]" s'affiche sur la ligne @testable import myModuleName
.
J'ai essayé
Rien de tout cela n'a fonctionné pour ce projet (mais j'ai eu des tests pour travailler dans un autre projet). Quelqu'un at-il eu ce problème et l'a résolu?
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 standard quotidien dans le code.) Après avoir corrigé les erreurs et procédé à un nouveau nettoyage et à une nouvelle génération, cela a fonctionné.
Notez que ces erreurs ne sont pas apparues au début. Pour les amener à se présenter:
S'il y a d'autres erreurs, elles devraient apparaître maintenant. Corrigez-les puis décommentez votre code de fichier de test. L'erreur "Aucun module de ce type" a disparu pour moi.
Si cela ne résout pas le problème pour d'autres personnes, vous pouvez également essayer les solutions suivantes:
Nettoyer le dossier de construction
Ouvrez le menu Produit, maintenez enfoncé Optionet cliquez sur "Nettoyer le dossier de construction ..."
Assurez-vous que l'option Activer la testabilité est définie 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).
Supprimez et rajoutez votre cible de tests
Si vous avez fait les autres choses, je suppose que vous n’avez probablement pas besoin de faire cela. 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. Ensuite, sélectionnez 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 le rajouter. Comme vous pouvez le constater, vous pouvez également ajouter un ensemble de tests 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 qui a fonctionné.
Connexes
Veuillez vérifier le nom du module que vous essayez d'importer avec @testable import "ModuleName"
. Le nom du module devrait être le même sur Target->Build Settings-> Product Module Name
Le problème pour moi était que la cible de déploiement iOS des tests n'était pas configurée pour être la même que la cible principale. Alors assurez-vous de vérifier cela.
Dans votre cible de test:
Build Settings -> iOS Deployment Target -> iOS<same as the target you are testing>
C'est ainsi que j'ai procédé pour que mon code fonctionne après avoir essayé toutes les solutions suggérées à partir de suggestions précédentes.
Et tout a fonctionné comme un charme. J'espère que cela t'aides.
Une chose à surveiller est que si votre nom de module contient un tiret -
, vous devrez vous y référer avec une barre de soulignement au lieu de _
. Pour une raison quelconque, je soupçonnais que cela pouvait être un problème et c'était effectivement mon problème.
par exemple. @testable import Ocean-Swift
devient @testable import Ocean_Swift
Autre chose, si vous utilisez la syntaxe @testable
, veillez à ne pas inclure votre code de production dans votre cible de test. J'ai trouvé que cela causerait une bizarrerie inexplicable.
Une autre chose à vérifier: si vous avez un projet Objective-C, mais é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 dans 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 ne pas en avoir 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 que le problème «Aucun module» se soit présenté. Après quelques critiques, 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 il ne fonctionne qu'avec ce dernier ... je vais donc soit devoir laisser le fichier vide dans le projet, convertir certains Objective-C en Swift ou en ajouter d'autres. nouveau code au projet écrit en Swift.
Cela semble être une erreur avec les paramètres de construction des deux cibles . Vous devez vous assurer que:
ENABLE_TESTABILITY
est égal à Oui pour les deux cibles.PRODUCT_MODULE_NAME
de la cible de test doit être différente de celle de l'application.Assurez-vous que dans les paramètres 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 ..., accédez à la section Générer, cliquez sur plus + et sélectionnez la cible que vous souhaitez tester.
Dans mon cas, nous avons développé une cible interne (avec quelques différences mineures) et, après une fusion, elle a été supprimée de la configuration de test.
Après avoir passé quelques jours sur ce sujet, je me suis enfin mis au travail avec mon projet. Le problème était dans l'en-tête de pontage - le chemin dans la cible de tests ne peut pas être vide si vous utilisez un en-tête de pontage dans votre cible principale
J'espère que cela fera gagner du temps à quelqu'un.
Voici encore une autre chose à vérifier qui ne figure pas dans la liste. 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 contrat de licence! Une fois que j'ai sélectionné une équipe différente dans les paramètres généraux de ma cible, et que j'ai ensuite spécifié une cible de déploiement spécifique, telle que 12.1 ou 11.0, l'avertissement "Aucun module de ce type" a soudainement disparu.
J'ai eu le même problème. Le nettoyage du dossier de construction et le redémarrage de Xcode ne fonctionnaient pas.
Pour moi, ce qui a fonctionné a été de veiller à ce que le paramètre "Construire une architecture active uniquement" de votre cible et modèle de test corresponde au paramètre de la cible et du modèle de votre application.
Mon problème était que la classe que je voulais tester était supposée être dans un module séparé (API Client), mais que la classe était en fait un membre de la cible de l'application et non de la cible de l'infrastructure. Changer l’appartenance cible de la classe a fait disparaître l’erreur d’importation!
J'ai suivi les étapes ci-dessus, qui ont fonctionné. Cependant, mon projet avait encore quelques problèmes. J'ai reçu cet avertissement et je ne pouvais pas accéder aux classes de mon projet principal à tester dans ma cible de test.
J'ai constaté que votre nom de module de produit cible cible (YourTestTarget -> Paramètres de construction -> recherche de product module
) ne peut pas être identique à votre nom de projet.
Une fois que j'ai changé le nom du module de produit pour ma cible de test, tout a fonctionné.
Pour moi, la solution était de renommer @testable importer myproject_ios en @testable import myproject après avoir mis à jour le nom du produit cible myproject-ios dans Build Settings/Packaging/Product Name/de $ {TARGET_NAME} vers myproject.
Dans la cible de test des paramètres de construction, cochez 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)
Ce problème a été résolu pour moi lorsque j'ai modifié la cible Deployment Target de 9.3 à 11.0.
Général> Cible de déploiement> "11.0"
Si vous utilisez xcodebuild et trouvez ce problème, envisagez d'ajouter un indicateur d'espace de travail à la commande de construction.
Changé cela
$ xcodebuild -scheme PowToonsTests -destination 'name=iPhone X' test
Pour ça
$ xcodebuild -workspace PowToons.xcworkspace -scheme PowToonsTests -destination 'name=iPhone X' test