"Un tel module" lors de l'utilisation de @testable dans Xcode tests Unitaires

j'ai récemment mis à jour à Xcode 7 beta 5. J'ai essayé d'ajouter un test unitaire à un projet précédent, mais j'ai reçu le message d'erreur "no such module [myModuleName]" sur la ligne @testable import myModuleName .

enter image description here

j'ai essayé

  • nettoyage du projet avec Option dossier de construction propre
  • vérification que " Activer la testabilité" (debug) a été défini à Oui dans les options de construction
  • suppression de la cible d'essai et ajout du faisceau D'unités d'essai iOS

rien de tout cela n'a fonctionné pour ce projet (mais j'ai obtenu des tests pour travailler dans un autre projet). Quelqu'un d'autre a eu ce problème et l'a résolu?

94
demandé sur Senseful 2015-08-14 13:56:30

19 réponses

veuillez vérifier le nom de votre Module que vous essayez d'importer avec @testable import "ModuleName" . Le nom du module doit être le même sur Target->Build Settings-> Product Module Name

124
répondu Voda Ion 2016-02-09 10:37:28

La réponse qui a fonctionné pour moi

la réponse était que j'avais quelques erreurs dans mon projet qui faisait échouer la construction. (C'était juste votre norme tous les jours bug dans le code. Après que j'ai corrigé les erreurs et fait un autre nettoyage et construire, il a fonctionné.

notez que ces erreurs ne sont pas apparues au début. Pour les faire venir:

  • commentez l'ensemble de votre fichier Test le "module" de l'erreur.
  • essayez de relancer votre projet.

S'il y a d'autres erreurs, elles devraient apparaître maintenant. Corrigez - les et décommentez votre code de fichier de Test. Le "module" erreur a disparu pour moi.


au cas où cela ne résoudrait 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 Option , et cliquez sur " Nettoyer le dossier de construction..."

enter image description here

s'assurer que la testabilité de L'option Enable est réglée sur Oui

dans le navigateur du projet, cliquez sur le nom de votre projet. Sélectionnez les paramètres de construction et faites défiler vers le bas pour construire des Options. Assurez-vous que la testabilité D'Enable est oui (pour débogage.)

enter image description here

supprimer et ajouter à nouveau votre cible de Tests

si vous avez fait le reste, je pense que vous n'avez probablement pas besoin de faire cela. Mais si vous le faites, n'oubliez pas de sauvegarder les tests unitaires que vous avez déjà écrits.

cliquez sur le nom de votre projet dans le projet Navigator. Ensuite, sélectionnez votre cible de Tests. Cliquez sur le bouton moins (-) en bas de la supprimer.

enter image description here

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 paquet de test D'UI de la même manière.

quelques autres idées

  • s'assurer que tous les classes obligatoires sont membres de votre cible de test.
  • assurez-vous que vous avez ajouté toutes les bibliothèques requises.
  • s'assurer que le nom du module est écrit correctement (voir cette réponse ).

Ou...

laisser un commentaire ou une réponse ci-dessous si vous avez trouvé quelque chose d'autre qui a fonctionné.

Liées

86
répondu Suragch 2017-05-23 12:10:48

le problème pour moi était que la cible de déploiement iOS des tests n'était pas réglée pour être la même que la cible principale. Donc, assurez-vous de vérifier cela.

dans votre cible de test:

Build Settings -> iOS Deployment Target -> iOS<same as the target you are testing>
26
répondu Jess 2017-08-03 09:41:28

C'est ainsi que j'ai fait fonctionner mon code après avoir essayé toutes les solutions suggérées à partir de suggestions antérieures.

  • j'ai mis "Activer la testabilité" à " OUI " au projet de construction de Paramètres
  • j'ai aussi défini 'Defines Module' à 'YES' dans les paramètres de construction de mon projet.
  • pour les réguliers .fichier(s) swift dans mon projet, dire MyApp , j'allais écrire des cas de test pour, j'ai les deux le principal " MyApp " et le " MyAppUnitTests Cible " vérifié sous Target Adhésion .
  • j'ai ensuite sélectionné mon(S) fichier (s) d'essai unitaire, déclaré le ' @importation testable MyApp 'en haut, sous le' import XCTest ', et seulement coché le "Mesappunittests" sous Target membership

Et tout a fonctionné comme un charme. Espérons que cette aide.

19
répondu Vick Swift 2015-11-03 09:40:46

un gotcha à surveiller est que si votre nom de module a un caractère de tiret en elle - alors vous devrez y faire référence avec une barre inférieure à la place _ . Pour une raison que je soupçonne cela peut ê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 syntaxe @testable assurez-vous de ne pas inclure votre code de production dans votre cible de test. J'ai trouvé cette va causer inexplicable bizarrerie.

14
répondu smileBot 2016-02-17 23:49:38

Cela semble être une erreur avec les paramètres de construction de deux cibles. Vous devez vous assurer que:

  • ENABLE_TESTABILITY égale Oui pour les deux cibles.
  • la valeur PRODUCT_MODULE_NAME de la cible d'essai doit différer de celle de l'application.
7
répondu yageek 2018-05-24 06:15:55

autre chose à vérifier: si vous avez un projet Objectif-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 Objectif-C, mais je voulais écrire des tests unitaires dans Swift.

j'ai ajouté un fichier Swift à la cible principale pour générer L'en-tête ProjectName-Bridging nécessaire.h fichier, é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 dans Objective-C... Je n'écrivais que des tests à Swift).

Je n'ai pas remarqué de problème jusqu'à ce que plus tard, après avoir fait un dossier" clean/clean build "et le problème" No Such Module " apparaisse. Après quelques égratignures, 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 lui... donc, je vais soit avoir besoin de laisser le fichier vide dans le projet, de convertir certains objectifs-C en Swift, ou d'ajouter un nouveau code au projet écrit dans Swift.

5
répondu Jim Rhoades 2017-09-28 15:09:22

assurez-vous que sous le paramètre de construction du programme de test, la cible de test est dans la liste.

à côté du bouton Lecture, sélectionnez le schéma de test, puis modifiez le schéma..., allez dans la section construire, cliquez plus + et sélectionnez la cible que vous voulez tester.

dans mon cas, nous avons une cible interne que nous développons avec (quelques différences mineures) et après une fusion, elle a été retirée de la configuration de test.

Edit test scheme

3
répondu BrianHenryIE 2017-02-01 22:10:26

mon problème était que la classe que je voulais tester était supposée être dans un module séparé (API Client), mais la classe était en fait un membre de la cible app et non de la cible framework. Changer la composition cible de la classe a fait disparaître l'erreur d'importation!

2
répondu Maciej Swic 2016-12-31 18:50:32

j'ai eu ce même problème. Nettoyer le dossier de construction et redémarrer Xcode n'a pas fonctionné.

ce qui a fonctionné pour moi était de s'assurer que le réglage pour" construire L'Architecture Active seulement " de votre cible et schéma de test correspond au réglage de la cible et du schéma de votre application.

2
répondu Airuop 2017-10-17 05:01:43

ma solution est ici.

Tout D'Abord OdeAlSwiftUITest.cliquez sur swift, puis vérifiez le projet TargetName dans l'adhésion cible.

enter image description here

2
répondu eyupcimen 2018-05-23 10:04:37

Environnement: Xcode Version 9.0 (9A235)

Scénario: Test d'une structure open-source.

J'ai eu le même problème: "Pas de tel module".

Solution:

  1. sélectionner la cible D'essai.
  2. Sélectionner Les Phases De Construction
  3. ajouter le cadre à être testé via le lien Binaire...

enter image description here

Voici le fichier test.: enter image description here

1
répondu Frederick C. Lee 2017-09-13 22:38:27

j'ai suivi les étapes ci-dessus, qui ont fonctionné. Cependant, mon projet avait d'autres problèmes. J'ai reçu cet avertissement et je ne pouvais pas accéder aux classes de mon projet principal pour tester dans ma cible de test.

Tests part of module - ignoring import

j'ai trouvé que le nom de votre Module produit cible (YourTestTarget -> paramètres de Construction -> Recherche de product module ) ne peut pas être le même que le nom de votre projet.

Product Module Name for test target cannot be the same name as your project name

une fois que j'ai changé le nom du Module produit pour ma cible d'essai, tout a fonctionné.

enter image description here

1
répondu Bryan Norden 2018-05-24 13:15:55

en plus des 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 de l'unité enter image description here

0
répondu Matt D 2017-06-21 23:34:51

pour moi la solution était de renommer @testable importation myproject_ios de @testable importation myproject après avoir mis à jour le nom du produit de la cible myproject-ios dans les paramètres de construction/empaquetage/nom du produit/ de ${TARGET_NAME} à myproject.

0
répondu Matthias 2017-11-07 10:49:23

cela a été corrigé pour moi lorsque j'ai changé la " de déploiement cible de 9.3 à 11.0.

Général > Cible De Déploiement > "11.0"

0
répondu user9226093 2018-01-17 21:19:15

si vous utilisez xcodebuild et que vous trouvez ce problème, envisagez d'ajouter un drapeau workspace à la commande build.

A Changé Ce

$ xcodebuild -scheme PowToonsTests -destination 'name=iPhone X' test

À Ce

$ xcodebuild -workspace PowToons.xcworkspace -scheme PowToonsTests -destination 'name=iPhone X' test
0
répondu Victor 'Chris' Cabral 2018-08-11 18:29:20

dans la cible de test des paramètres de construction, vérifiez le test de l'hôte, il prend le nom défini dans PRODUCT_NAME. C'est ce nom que vous devriez utiliser dans les classes de test.

je recommande de ne pas changer PRODUCT_NAME (match name of the main target)

0
répondu Sam 2018-10-02 08:02:43

comme décrit dans cette réponse j'ai ajouté des tests Swift à un projet Obj-C seulement. La solution était d'ajouter une classe fictive Swift, après quoi Xcode inviterait à ajouter un en-tête passerelle, puis à supprimer la classe Swift. Tout était très bien, après que.

-1
répondu funkybro 2017-05-23 11:47:29