web-dev-qa-db-fra.com

Impossible de charger le module sous-jacent pour XCTest

Je travaille dans Swift sur Xcode et par défaut, il crée un fichier de test faisant référence à XCTest.

Lorsque je configure l'appartenance cible à mon projet principal, cela cause cette erreur

Impossible de charger le module sous-jacent pour XCTest

Si cette appartenance cible n'est pas définie, les tests s'exécutent correctement et tout fonctionne correctement.

PS: je suis nouveau à Swift et c'est probablement une question idiote (s'il-vous-plaît m'éclairer) 

146
brduca

Le projet principal n'est pas lié au framework XCUnit. Vous devez créer une cible de test distincte pour votre projet, s'il n'en existe pas déjà, et ajouter vos fichiers de source de test à cette cible.

  1. Sélectionnez votre projet dans le navigateur de projet. Cela ouvrira les paramètres du projet dans l'éditeur.
  2. Cliquez sur le bouton "+" au bas de la colonne énumérant vos cibles. 
  3. Si vous travaillez sur un modèle de projet iOS , sélectionnez iOS > Test > iOS Unit Testing Bundle.

    Si vous travaillez sur un modèle de projet OS X , sélectionnez OS X > Test > OS X Unit Testing Bundle

128
pwc

Vérifiez à nouveau que le fichier en question ne se trouve pas dans la cible principale, mais uniquement dans la cible de test. Seule la cible de test aura ce cadre à importer.

151
Aaron Zinman

Vous venez d'ajouter votre fichier/classe de tests à la cible principale et non à la cible de test par erreur. Aussi simple que cela.

Solution:

1) Supprimez le fichier de test de la liste "Compiler les sources" sous l'onglet "Construire les phases" de la cible principale.

2) Ajouter le même fichier dans "Compiler les sources" sous l'onglet "Construire les phases" pour la cible de test

Il faut résoudre le problème

24
Alfishe

C'est peut-être un peu tard mais ce que vous devez faire c'est: 

Cliquez sur Fichier> Nouveau> Cible> Ensemble de tests unitaires iOS. 

Et ajoutez ensuite vos tests ici. Cela a fonctionné pour moi. Le problème était que je n'avais pas sélectionné la création de tests unitaires lors de la création de mon projet. J'espère que cela aide quelqu'un. 

5
Clinton D'Souza

Je reçois cette erreur si je crée une cible de structure dynamique macOS, qui renvoie à XCTest.framework (la cible est une cible de structure, pas une cible de test!). 

Dans ce cas, le problème est résolu en ajoutant 

/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/Library/Frameworks

dans le projet "Paramètres de construction/chemins de recherche dans la structure".

4

Après beaucoup de dépannage et de rebondissements autour de pages telles que celle-ci, j'ai trouvé un détail qui n'était pas mentionné dans les autres pages de dépannage du test d'unité iOS.

Si votre projet utilise CocoaPods, veillez à inclure votre cible de test imbriquée dans la cible de votre application principale. Votre podfile pourrait ne pas l'inclure si vous avez créé votre cible de test après en cours d'exécution pod init. Votre podfile devrait ressembler à ceci:

target 'YourApp' do
    target 'YourAppTests' do
        inherit! :search_paths
        # Pods for testing
    end
end

N'oubliez pas de sauvegarder votre podfile et d'exécuter pod install après l'avoir fait.

J'espère que ça aide!

2
Orlando G Rodriguez

Ce problème se produit deux fois dans votre projet.

  1. Lorsque vous n’ajoutez pas UnitTestingBundle à votre projet lors de la création d’un nouveau projet.
  2. Lorsque vous installez CocoaPods dans votre projet, parfois pas à chaque fois.

1: Réponse:

  • Aller dans le fichier Cliquez sur Fichier.

  • Ensuite, vous voyez la première option Nouveau Cliquez dessus.

  • Après avoir cliqué dessus, une option apparaît, cliquez sur Cible. 

  • Et puis, dans le Searchbar IOS, l'ensemble de tests unitaires et l'ajout du problème sont résolus.

  • si le compilateur ne peut pas vous donner la permission d'ajouter ceci, essayez alors la deuxième méthode quand est donné ci-dessous.

2. Réponse au problème CocoaPod:

  • Aller au produit Cliquez sur le produit.

  • Cliquez sur Nettoyer ou appuyez sur cmd + k.

  • Problème résolu.

2
zeeshan Dar

Assurez-vous que l'adhésion cible est cochée pour tous les modules lorsque la structure de test est sélectionnée. Vous pouvez afficher l'option Appartenance cible en sélectionnant Affichage-> Utilitaires-> Afficher l'inspecteur de fichier.

1
karma

Tout comme @Alfishe mentionné ci-dessus: 

Vous devez supprimer les fichiers de test de Compiler Sources sous Build Phases 

Comme indiqué ci-dessous


 enter image description here

0
Suhaib

J'ai eu le même problème et la solution pour moi était de:

  1. Sélectionnez mon schéma
  2. Modifier le schéma ...
  3. Puis, quand la fenêtre de configuration du schéma est ouverte, sélectionnez l’onglet de gauche nommé "Test" pour être redirigé ici: enter image description here
  4. Comme vous pouvez le voir, mes UITest ne sont pas ajoutés ici, mais existent dans mon projet. Il me suffisait donc d'appuyer sur le bouton Plus et de sélectionner ma cible UITests comme ceci: enter image description here
  5. Puis appuyez sur le bouton "Ajouter" et fermez la vue de la configuration
  6. Terminez avec un nettoyage de projet et essayez à nouveau, cela devrait fonctionner
  7. Et n'oubliez pas de vérifier cela aussi: https://developer.Apple.com/library/archive/qa/qa1954/_index.html

J'espère que cette réponse vous aidera.

PS: une dernière fois dans ma cible de test dans les paramètres de construction, je devais vérifier ces propriétés qui n'étaient pas configurées correctement: 

DEBUG_INFORMATION_FORMAT = dwarf; 
ONLY_ACTIVE_Arch = YES;
VALIDATE_PRODUCT = NO;
0
O. Boujaouane

J'ai fait tout ce qui précède, mais je n'ai toujours pas été autorisé à accéder aux méthodes que je voulais tester. Mais avant d’écrire un scénario de test, j’ai construit le projet une fois, puis les méthodes étaient accessibles. Alors essayez-le et laissez-moi savoir s'il résout un problème.

0
sunil chayagol

Bien que la réponse acceptée résolve ce problème la plupart du temps, il existe un autre moyen de détecter cette erreur. 

Si vous vous êtes déjà assuré que:  

Comme souligné par @pwc @ nick-n et d'autres 

  1. Le fichier ClassTest.Swift pour l'appartenance à la cible en s'assurant qu'il est seulement / attaché à la cible Testing.
  2. Le ClassTest.Swift est not visible sous votre cible principale de l'application> Construire des sources> Compiler des sources

Voici ce que vous pouvez vérifier:

dans votre fichier .podspecs 

Assurez-vous que votre source_files n'inclut pas directement ou indirectement le répertoire de test.

par exemple :

s.source_files = ["Classes/**/*.{Swift}", "Classes/**/*.{xib}"]
s.exclude_files = ["Classes/Exclude", "Classes/MyPodProjTests/"]

Notez que Classes/**/*.{Swift} inclut tout ce qui dépasse le fait que le répertoire MyPodProjTests doit être exclu. 

Solution:  

s.source_files = ["Classes/MyPodProj/**/*.{Swift}", "Classes/**/*.{xib}"]

Note: C’est un cas extrême et une erreur complètement humaine, mais j’ai pensé que cela vaudrait la peine d’être souligné. 

0
thesummersign