J'ai commencé à travailler avec OCMock pour écrire des scénarios de test pour le projet existant que j'ai intégré à mon espace de travail. Après avoir suivi toutes les étapes mentionnées dans ce link
Quand j'ai exécuté mon cas de test pour la première fois, cela me donne cette erreur. Je l'ai cherché et essayé de suivre certaines des solutions telles que "créer une nouvelle cible", "redémarrer Xcode", mais cela ne m'a pas aidé. Une idée?
J'ai mes notes et des applications de démonstration pour Cocoapods et Carthage ici https://github.com/onmyway133/TestTarget
Runpath Search Paths
pour qu'il pointe vers $(FRAMEWORK_SEARCH_PATHS)
Plus d'informations
J'utilise carthage et le problème pour moi était de rechercher des dépendances dans une cible de test. Réparer:
Ajoutez $(PROJECT_DIR)/Carthage/Build/iOS
à Runpath Search Paths
Vous pouvez trouver la référence ici: numéro de Carthage
Il pourrait y avoir une autre solution si vous utilisez CocoaPods et que la cible de test de l'interface utilisateur est intégrée à la cible de l'application, ce qui est malheureusement le cas dans le modèle par défaut (pod init
).
Essayez de déplacer la cible de test d'interface utilisateur en dehors de la cible d'application comme suit:
de:
platform :ios, '11.0'
use_frameworks!
target 'MyApp' do
# Pods for MyApp
target 'MyAppUITests' do
inherit! :search_paths
# Pods for testing
end
end
à:
platform :ios, '11.0'
use_frameworks!
# Pods shared between MyApp and MyAppUITests
target 'MyApp' do
# Pods for MyApp only
end
target 'MyAppUITests' do
# Pods for testing
end
Le crédit va à SpacyRicochet dans ce fil de discussion: https://github.com/CocoaPods/CocoaPods/issues/4752#issuecomment-305101269
Dans mon cas, il n'y avait aucun problème avec les fichiers liés . Le simulateur était bloqué par le message que l'application avait déclenché, comme: "Le nom de l'application aimerait vous envoyer des notifications". Appuyez sur OK et la prochaine fois que mes XCTests fonctionnent correctement.
Juste pour partager mon expérience à propos de cette erreur:
J'utilise fastlane + cocoapods.
J'ai un espace de travail avec 2 frameworks dynamiques:
Les dépendances:
Les dépendances sont définies dans le fichier podfile.
L'erreur s'est produite lors de l'exécution des tests de la structure B.
Dans mon cas, le problème était lié à la dépendance manquante à AFNetworking dans B.framework target.
Ajout d’une dépendance de pod à AFNetworking dans B.framework dans Podfile, tout a été résolu.
Ainsi, même si la cible B compile correctement, AFNetworking n’était pas intégré à l’application de test B et le simulateur n’a pas pu exécuter l’application de test B, ce qui génère une erreur "très significative" (*) .
(*) merci à Apple pour cela!
Ma solution consistait à ajouter une "phase de copie du fichier" à ma cible de test . Là, j'ai défini la destination sur Frameworks et ajouté mon cadre avec le signe +.
Mon cas était spécial. J'ai utilisé 2 fichiers en tant que classes de test. l'un fonctionnait parfaitement et l'autre avait cette erreur.
Les deux sont liés au même cadre.
DONNÉES DÉRIVÉES CLAIRES
Fenêtre => Projets => Supprimer (sur votre projet)
Bonne chance .__ et bon test!
Dans mon cas, je n’avais pas ajouté de phase d’exécution de script pour les bibliothèques Quick et Nimble, que j’ai intégrées avec Carthage.
Dans mon cas, Build Active Architecture Only était défini sur YES.
Dans le projet et les cibles: Construire Paramètres -> Architectures -> Construire Architecture active uniquement doit être NON au lieu de OUI
J'avais le même problème et j'essayais déjà tout ce qui était proposé ici sans aucun succès.
L'exécution des tests sur un simulateur différent a résolu le problème pour moi. Après cela, le simulateur d’origine n’a plus échoué non plus.
Wow, j'ai perdu beaucoup de temps à ce sujet, mon lot de tests avait sélectionné "l'application hôte" pour mon application. Les autres lots de tests ne l'ont pas été.
Je m'attends à ce que cette solution ne soit peut-être pas la bonne solution pour chaque situation, mais mes tests visaient principalement à tester la bibliothèque dynamique et ne nécessitaient pas vraiment d'application hôte. Je devais obtenir l'erreur ci-dessus, désactiver cette option m'a permis d'exécuter les tests sans obtenir cette erreur et les points d'arrêt fonctionnaient. J'utilisais MacOS mais cela fonctionne probablement de la même manière dans d'autres environnements. Je m'attends à ce que cette solution ne soit peut-être pas la bonne solution pour chaque situation, mais mes tests visaient principalement à tester la bibliothèque dynamique et ne nécessitaient pas vraiment d'application hôte.
Sur la série de tests Sélectionnez Général -> Test -> Définissez "Application hôte" sur Aucune.
Au cours de la création de Cocoa Touch Framework, toutes les tentatives d’exécution de tests portaient le même message d’erreur que celui écrit par OP.
Je l'ai corrigé en changeant la configuration de construction de TEST de Debug à Release.
Étape 1
Étape 2
Étape 3
Note : Aucune configuration supplémentaire de Runpath Search Paths
n'a été nécessaire.
J'utilise des Cocoapods dans les versions 1.6.1 et Xcode 10.1
I tried many different options but none helped me except below and wasted lot of time, posting this so that really help and save time on this:
Follow all of the instructions for Full Manual Configuration
https://github.com/appium/appium-xcuitest-driver/blob/master/docs/real-device-config.md#full-manual-configuration
Tips
When you come to the part where you are executing xcodebuild, if the build fails, and the log mentions "RoutingHTTPServer" or "YYCache", add these two frameworks on the Build Phases tab of the WebDriverAgentRunner target
Open the WebDriverAgent.xcodeproj
Select 'Targets' -> 'WebDriverAgentRunner'
Open 'Build Phases' -> 'Copy frameworks'
Click '+' -> add RoutingHTTPServer
Click '+' -> add YYCache
https://github.com/facebook/WebDriverAgent/issues/902#issuecomment-382344697
https://github.com/facebook/WebDriverAgent/issues/902#issuecomment-383362376
The build/test may also fail due to the WebDriverAgentRunner app/developer being untrusted on the device. Please trust the app and try again.
While trying to access the WebDriverAgent server status, if it tries to connect on port 0, hardcode port 8100 in appium-xcuitest-driver/WebDriverAgent/WebDriverAgentLib/Routing/FBWebServer.m
Original line: server.port = (UInt16)port;
New line: server.port = 8100;
https://github.com/facebook/WebDriverAgent/issues/661#issuecomment-338900334
Voudrais partager ma réponse en espérant que cela pourrait faire gagner du temps à quelqu'un.
Pour moi, le fichier .m n'était pas correctement lié sous Build Phases -> Compile Sources
Dans mon cas, j'avais un projet complètement propre avec des tests vides par défaut . Si j'ai ajouté un pod, j'ai reçu cette erreur . La solution était qu'au moins un fichier de la cible de test devrait importer Foundation.
import XCTest
import Foundation
@testable import CVZebra
class CVZebraTests: XCTestCase {
override func setUp() {
// Put setup code here. This method is called before the invocation of each test method in the class.
}
override func tearDown() {
// Put teardown code here. This method is called after the invocation of each test method in the class.
}
func testExample() {
// This is an example of a functional test case.
// Use XCTAssert and related functions to verify your tests produce the correct results.
}
func testPerformanceExample() {
// This is an example of a performance test case.
self.measure {
// Put the code you want to measure the time of here.
}
}
}
Dans mon cas, je devais retirer $(inherited)
de autres drapeaux de lieur dans ma cible de test d'interface utilisateur. J'ai installé des bibliothèques statiques via des cocoapodes.
Certains paramètres de projet ajoutés automatiquement viennent avec Xcode 10, et ils viennent parfois, pas tout le temps. Après avoir téléchargé Xcode 10, redémarrez votre ordinateur. C'est ce qui a réglé ça pour moi. Aucune de ces réponses ne l'a corrigé pour moi. J'espère que ça aide. J'aimerais pouvoir donner une meilleure réponse.
Dans mon cas, il y avait un problème avec mon application dans le simulateur. Avant que le problème ne se pose, j'ai traité une migration de base de données (royaume) qui a échoué et détruit ma base de données. Donc, tout a bien fonctionné pour moi après avoir supprimé l'application sur le simulateur.
Passer de Xcode 9.4.1 à Xcode 10.1 a résolu le problème dans mon cas.
Pour moi, je devais "faire confiance" au développeur dans "Gestion des périphériques" sous "Paramètres -> Général" sur mon appareil. (Paramètres -> Général -> Gestion des appareils -> DeveloperID -> "Faire confiance à l'application") Comme j'exécutais l'application via un chargement latéral avec mon identifiant Apple.
Dans mon cas, mes paramètres de construction -> Architectures étaient définis uniquement pour armv7 et j'ai changé pour ARCHS_STANDARD qui était identique à mon application hôte
Si quelqu'un éprouve encore ce problème ceci sa réponse m'a aidé. Définir Toujours intégrer les bibliothèques Swift Standard à Non dans les paramètres du projet. Je l'ai fait pour la cible de test d'interface utilisateur.
pour moi le problème était le fichier Pod
J'ai créé une nouvelle cible, mais j'ai oublié d'ajouter une cible dans le fichier pod
target 'mobilesdkIntegrationTests' do
// write here any predefined pods if any, like
testing_pods
end
il suffit d'ajouter la cible dans le fichier pod pour résoudre le problème
Dans mon cas, j'avais déclaré une propriété en lecture seule dans un fichier d'en-tête:
// In .h file
@property (nonatomic, readonly) NSUInteger count;
mais j'ai oublié d'ajouter cette déclaration au .m afin qu'un générateur soit généré:
// In .m file
@property (nonatomic, assign) NSUInteger count;
Silly erreur, pas tout à fait sûr pourquoi il se manifeste dans cette erreur, mais en ajoutant cette ligne au fichier .m corrigé le problème.