Ich habe begonnen OCMock
, Testfälle für das vorhandene Projekt zu schreiben, das ich in meinen Projektarbeitsbereich integriert habe. Nachdem Sie alle in diesem Link genannten Schritte ausgeführt haben .
Als ich meinen Testfall zum ersten Mal ausgeführt habe, wird der obige Fehler angezeigt. Ich habe es durchsucht und versucht, einige der Lösungen wie das Erstellen eines neuen Ziels und das Neustarten von Xcode zu befolgen, aber es hat mir nicht geholfen. Irgendeine Idee?
ios
unit-testing
xcode7
ocmock
Varun Mehta
quelle
quelle
Antworten:
Ich habe meine Notizen und Demo-Anwendungen für Cocoapods und Karthago hier https://github.com/onmyway133/TestTarget
Runpath Search Paths
, um auf zu zeigen$(FRAMEWORK_SEARCH_PATHS)
Mehr Info
quelle
$(FRAMEWORK_SEARCH_PATHS)
zuRunpath Search Paths
für mich gearbeitet. Prost!Runpath Search Paths
um darauf zu zeigen,$(FRAMEWORK_SEARCH_PATHS)
hilft mir.Ich benutze Karthago und das Problem für mich war die Suche nach Abhängigkeiten in einem Testziel. Fix:
Hinzufügen
$(PROJECT_DIR)/Carthage/Build/iOS
zuRunpath Search Paths
Eine Referenz finden Sie hier: Karthago Problem
quelle
$(PROJECT_DIR)/Carthage/Build/Mac
.Es gibt möglicherweise eine andere Lösung, wenn Sie CocoaPods verwenden und das UI-Testziel in das App-Ziel eingebettet ist, was in der Standardvorlage (
pod init
) leider der Fall ist .Versuchen Sie, das UI-Testziel wie folgt aus dem App-Ziel zu verschieben:
von:
platform :ios, '11.0' use_frameworks! target 'MyApp' do # Pods for MyApp target 'MyAppUITests' do inherit! :search_paths # Pods for testing end end
zu:
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
Das Guthaben geht an SpacyRicochet in diesem Issue-Thread: https://github.com/CocoaPods/CocoaPods/issues/4752#issuecomment-305101269
quelle
Meine Lösung bestand darin, meinem Testziel eine "Kopierdatei-Phase" hinzuzufügen. Dort habe ich das Ziel auf Frameworks gesetzt und mein Framework mit dem + -Zeichen hinzugefügt.
quelle
In meinem Fall war nichts falsch mit verknüpften Dateien. Der Simulator blieb bei der Nachricht hängen, die die App ausgelöst hatte, wie zum Beispiel: "Der App-Name möchte Ihnen Benachrichtigungen senden". Drücken Sie OK und das nächste Mal funktionierten meine XCTests einwandfrei.
quelle
Nur um meine Erfahrungen mit diesem Fehler zu teilen:
Ich benutze Fastlane + Cocoapods.
Ich habe einen Arbeitsbereich mit 2 dynamischen Frameworks:
Abhängigkeiten:
Abhängigkeiten werden im Podfile definiert.
Der Fehler wurde beim Ausführen von Framework B-Tests ausgelöst.
In meinem Fall hing das Problem mit der fehlenden Abhängigkeit von AFNetworking im B.framework-Ziel zusammen.
Durch Hinzufügen einer Pod-Abhängigkeit zu AFNetworking in B.framework in Podfile wurde alles behoben.
Selbst wenn das Ziel B erfolgreich kompiliert wurde, wurde AFNetworking nicht in die B-Test-App eingebettet und der Simulator konnte die B-Test-App nicht ausführen, was diesen "sehr bedeutsamen" (*) Fehler auslöste .
(*) Danke an Apple dafür!
quelle
In meinem Fall wurde Build Active Architecture Only auf YES gesetzt.
In Projekt und Zielen: Build-Einstellungen -> Architekturen -> Nur aktive Architektur erstellen sollte NEIN anstelle von JA sein
quelle
Wow, ich habe viel Zeit damit verschwendet, mein Testpaket hatte die "Host-Anwendung" für meine Anwendung ausgewählt. Andere Testpakete haben dies nicht getan.
Ich gehe davon aus, dass diese Lösung möglicherweise nicht für jede Situation die richtige Lösung ist, aber meine Tests bestanden hauptsächlich darin, die dynamische Bibliothek zu testen, und es war nicht wirklich eine Host-Anwendung erforderlich, um ausgeführt zu werden. Ich habe den obigen Fehler erhalten. Durch Deaktivieren konnte ich die Tests ausführen, ohne diesen Fehler zu erhalten, und die Haltepunkte funktionierten. Ich habe MacOS ausgeführt, aber es funktioniert wahrscheinlich auch für andere Umgebungen. Ich gehe davon aus, dass diese Lösung möglicherweise nicht für jede Situation die richtige ist, aber meine Tests bestanden hauptsächlich darin, die dynamische Bibliothek zu testen, und es war nicht wirklich eine Host-Anwendung erforderlich, um ausgeführt zu werden.
Gehen Sie im Testpaket zu Allgemein -> Testen -> Setzen Sie "Host-Anwendung" auf Keine.
quelle
In meinem Fall hatte ich keine Run Script-Phase für die Quick- und Nimble-Bibliotheken hinzugefügt, die ich mit Carthage integriert habe.
quelle
Ich hatte das gleiche Problem und habe bereits alles, was hier vorgeschlagen wurde, ohne Erfolg ausprobiert.
Das Ausführen der Tests auf einem anderen Simulator löste das Problem für mich. Danach verursachte der ursprüngliche Simulator auch keine Ausfälle mehr.
quelle
Mein Fall war etwas Besonderes. Ich habe 2 Dateien als Testklassen verwendet. einer funktionierte perfekt und der andere hatte diesen Fehler.
Beide verbinden sich mit demselben Framework.
Lösung
Viel Glück und viel Spaß beim Testen!
quelle
Während ich Cocoa Touch Framework erstellte, endete jeder Versuch, Tests auszuführen, mit derselben Fehlermeldung wie OP.
Ich habe es behoben, indem ich die Build-Konfiguration von TEST von Debug auf Release geändert habe.
Schritt 1
Schritt 2
Schritt 3
Hinweis : Es war keine zusätzliche Konfiguration von erforderlich
Runpath Search Paths
.Ich verwende Cocoapods in Version 1.6.1 und Xcode 10.1
quelle
Wenn noch jemand dieses Problem hat , hat mir diese Antwort geholfen. Setzen Sie in den Projekteinstellungen Always Embed Swift Standard Libraries auf No. Ich habe es für das UI-Testziel gemacht.
quelle
Ich habe viele verschiedene Optionen ausprobiert, aber keine hat mir geholfen, außer unten, und viel Zeit verschwendet, indem ich dies gepostet habe, damit es wirklich hilft und Zeit spart:
Befolgen Sie alle Anweisungen zur vollständigen manuellen Konfiguration
https://github.com/appium/appium-xcuitest-driver/blob/master/docs/real-device-config.md#full-manual-configuration Tipps Wenn Sie zu dem Teil kommen, in dem Sie xcodebuild ausführen, wenn der Die Erstellung schlägt fehl, und im Protokoll wird "RoutingHTTPServer" oder "YYCache" erwähnt. Fügen Sie diese beiden Frameworks auf der Registerkarte "Erstellungsphasen" des WebDriverAgentRunner-Ziels hinzu. Öffnen Sie die Datei "WebDriverAgent.xcodeproj"
Wählen Sie 'Ziele' -> 'WebDriverAgentRunner'
Öffnen Sie 'Build Phases' -> 'Copy Frameworks'.
Klicken Sie auf '+' -> RoutingHTTPServer hinzufügen
Klicken Sie auf '+' -> YYCache hinzufügen https://github.com/facebook/WebDriverAgent/issues/902#issuecomment-382344697 https://github.com/facebook/WebDriverAgent/issues/902#issuecomment-383362376
Der Build / Test kann auch fehlschlagen, weil die WebDriverAgentRunner-App / der WebDriverAgentRunner-Entwickler auf dem Gerät nicht vertrauenswürdig ist. Bitte vertraue der App und versuche es erneut.
Wenn beim Versuch, auf den WebDriverAgent-Serverstatus zuzugreifen, versucht wird, eine Verbindung über Port 0 herzustellen, wird der Port 8100 in appium-xcuitest-driver / WebDriverAgent / WebDriverAgentLib / Routing / FBWebServer.m fest codiert
Ursprüngliche Zeile: server.port = (UInt16) port; Neue Zeile: server.port = 8100; https://github.com/facebook/WebDriverAgent/issues/661#issuecomment-338900334
quelle
Ich möchte meine Antwort teilen und hoffe, dass dies jemandem Zeit sparen kann.
Für mich war die .m-Datei unter Build-Phasen -> Quellen kompilieren nicht richtig verknüpft
quelle
In meinem Fall hatte ich eine Eigenschaft in einer Header-Datei als schreibgeschützt deklariert:
// In .h file @property (nonatomic, readonly) NSUInteger count;
aber ich habe vergessen, diese Deklaration zur .m hinzuzufügen, damit ein Setter generiert wird:
// In .m file @property (nonatomic, assign) NSUInteger count;
Ein dummer Fehler, nicht ganz sicher, warum er sich in diesem Fehler manifestiert hat, aber das Hinzufügen dieser Zeile zur .m hat das Problem behoben.
quelle
In meinem Fall wurden meine Build-Einstellungen -> Architekturen nur für armv7 festgelegt, und ich habe für ARCHS_STANDARD geändert, das mit meiner Host-Anwendung identisch ist
quelle
Für mich musste ich dem Entwickler in "Geräteverwaltung" unter "Einstellungen -> Allgemein" auf meinem Gerät "vertrauen". (Einstellungen -> Allgemein -> Geräteverwaltung -> Entwickler- ID -> "App vertrauen") Als ich die App durch seitliches Laden mit meiner Apple-ID ausführte.
quelle
In meinem Fall hatte ich entfernen
$(inherited)
aus Anderen Linker Flags in meinem ui Testziel. Ich habe statische Bibliotheken über Cocoapods installiert.quelle
Für mich war das Problem die Pod-Datei.
Ich habe ein neues Ziel erstellt, aber vergessen, ein Ziel in die Pod-Datei einzufügen
target 'mobilesdkIntegrationTests' do // write here any predefined pods if any, like testing_pods end
Fügen Sie einfach ein Ziel in die Pod-Datei ein, um das Problem zu beheben
quelle
Es gibt einige automatisch hinzugefügte Projekteinstellungen, die mit Xcode 10 geliefert werden, und sie kommen manchmal, nicht immer. Starten Sie Ihren Computer nach dem Herunterladen von Xcode 10 neu. Das hat das für mich behoben. Keine dieser Antworten hat es für mich behoben. Ich hoffe das hilft. Ich wünschte, ich könnte eine bessere Antwort geben.
quelle
Der Wechsel von Xcode 9.4.1 zu Xcode 10.1 löste das Problem in meinem Fall.
quelle
In meinem Fall hatte ich ein vollständig sauberes Projekt mit standardmäßig leeren Tests. Wenn ich einen Pod hinzugefügt habe, habe ich diesen Fehler erhalten. Die Lösung bestand darin, dass mindestens eine Datei im Testziel Foundation importieren sollte
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. } } }
quelle
In meinem Fall gab es ein Problem mit meiner App im Simulator. Bevor das Problem auftrat, habe ich eine Datenbankmigration (Realm) verarbeitet, die fehlgeschlagen ist und meine Datenbank zerstört hat. Nachdem ich die App auf dem Simulator gelöscht hatte, funktionierte alles für mich.
quelle