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)
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.
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
.
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.
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
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.
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".
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!
Ce problème se produit deux fois dans votre projet.
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.
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.
J'ai eu le même problème et la solution pour moi était de:
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;
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.
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
ClassTest.Swift
pour l'appartenance à la cible en s'assurant qu'il est seulement / attaché à la cible Testing.ClassTest.Swift
est not visible sous votre cible principale de l'application> Construire des sources> Compiler des sourcesVoici 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é.