Ich habe kürzlich auf Xcode 7 Beta 5 aktualisiert. Ich habe versucht, einem früheren Projekt einen Komponententest hinzuzufügen, erhalte jedoch die Fehlermeldung "Kein solches Modul [myModuleName]" in der @testable import myModuleName
Zeile.
Ich habe es versucht
- Bereinigen des Projekts mit OptionClean Build Folder
- Überprüfen Sie, ob "Testbarkeit aktivieren" (Debug) in den Build-Optionen auf "Ja" gesetzt wurde
- Löschen des Testziels und erneutes Hinzufügen des iOS Unit-Testpakets
Nichts davon hat für dieses Projekt funktioniert (aber ich habe Tests bekommen, um in einem anderen Projekt zu arbeiten). Hat jemand anderes dieses Problem gehabt und es gelöst?
ios
xcode
unit-testing
xctest
Suragch
quelle
quelle
Antworten:
Bitte überprüfen Sie Ihren Modulnamen, mit dem Sie importieren möchten
@testable import "ModuleName"
. Der Modulname sollte am identisch seinTarget->Build Settings-> Product Module Name
quelle
space
und_
-
und_
. Eines meiner Projekte hat ein Minus-
im Namen, aber das Modul hat_
stattdessen einen Unterstrich""
Idee und bekamExpected identifier in import declaration
Build Settings
Ihr Projekt auswählen (nicht den Test oder UI - Test) , dann suchen Sie nach ,PRODUCT_MODULE_NAME
was auch immer zeigt dort oben ist , was nach gehen sollte@testable import
Die Antwort, die für mich funktioniert hat
Die Antwort war, dass ich einige Fehler in meinem Projekt hatte, die dazu führten, dass der Build fehlschlug. (Es war nur Ihr täglicher Standardfehler im Code.) Nachdem ich die Fehler behoben und eine weitere Bereinigung und Erstellung durchgeführt hatte, funktionierte es.
Beachten Sie, dass diese Fehler zuerst nicht angezeigt wurden. Damit sie auftauchen:
Wenn andere Fehler auftreten, sollten diese jetzt angezeigt werden. Korrigieren Sie sie und kommentieren Sie den Code Ihrer Testdatei aus. Der Fehler "Kein solches Modul" war für mich verschwunden.
Falls dies das Problem für andere Personen nicht löst, können Sie auch Folgendes versuchen:
Bereinigen Sie den Build-Ordner
Öffnen Sie das Produktmenü, halten OptionSie die Maustaste gedrückt und klicken Sie auf "Build-Ordner bereinigen ...".
Stellen Sie sicher, dass Testbarkeit aktivieren auf Ja gesetzt ist
Klicken Sie im Projektnavigator auf Ihren Projektnamen. Wählen Sie Build Settings und scrollen Sie nach unten zu Build Options. Stellen Sie sicher, dass Testbarkeit aktivieren auf Ja gesetzt ist (für das Debuggen).
Löschen Sie Ihr Testziel und fügen Sie es erneut hinzu
Wenn Sie die anderen Dinge getan haben, ist meine Vermutung, dass Sie dies wahrscheinlich nicht tun müssen. Denken Sie in diesem Fall jedoch daran, alle bereits geschriebenen Komponententests zu speichern.
Klicken Sie im Projektnavigator auf Ihren Projektnamen. Wählen Sie dann Ihr Testziel aus. Klicken Sie unten auf das Minuszeichen (-), um es zu löschen.
Klicken Sie dann auf das Pluszeichen (+) und wählen Sie iOS Unit Testing Bundle, um es wieder hinzuzufügen. Wie Sie sehen, können Sie auf die gleiche Weise auch ein UI-Testpaket hinzufügen.
Ein paar andere Ideen
Oder...
Hinterlassen Sie unten einen Kommentar oder eine Antwort, wenn Sie etwas anderes gefunden haben, das funktioniert hat.
verbunden
quelle
Das Problem für mich war, dass das iOS-Bereitstellungsziel der Tests nicht mit dem Hauptziel identisch war. Überprüfen Sie dies also unbedingt.
In Ihrem Testziel:
quelle
Enable Bitcode
umNo
auf dem Test - Bundle.Auf diese Weise habe ich meinen Code zum Laufen gebracht, nachdem ich alle Lösungsvorschläge aus früheren Vorschlägen ausprobiert hatte.
Und alles funktionierte wie Charme. Hoffe das hilft.
quelle
Ein Punkt, auf den Sie achten sollten, ist, dass Sie, wenn Ihr Modulname ein Bindestrichzeichen enthält,
-
stattdessen mit einer Unterleiste darauf verweisen müssen_
. Aus irgendeinem Grund vermutete ich, dass dies ein Problem sein könnte, und es war in der Tat mein Problem.z.B.
@testable import Ocean-Swift
wird@testable import Ocean_Swift
Nur eine andere Sache: Wenn Sie die
@testable
Syntax verwenden, stellen Sie sicher, dass Sie Ihren Produktionscode nicht in Ihr Testziel aufnehmen. Ich habe festgestellt, dass dies unerklärliche Verrücktheit verursachen wird.quelle
App (Dev)
. Das testbare Modul wurdeApp__Dev_
Dies scheint ein Fehler bei den Build-Einstellungen beider Ziele zu sein. Sie müssen sicherstellen, dass:
ENABLE_TESTABILITY
ist für beide Ziele gleich Ja.PRODUCT_MODULE_NAME
Wert des Testziels sollte sich von dem der Anwendung unterscheiden.quelle
Eine andere Sache, die Sie überprüfen sollten: Wenn Sie ein Objective-C-Projekt haben, aber Unit-Tests in Swift schreiben, stellen Sie sicher, dass das Hauptziel mindestens eine Swift-Datei verwendet!
Mehr Info:
Ich arbeitete an einem Objective-C-Projekt, wollte aber Unit-Tests in Swift schreiben.
Ich habe dem Hauptziel eine Swift-Datei hinzugefügt, um die erforderliche Datei ProjectName-Bridging-Header.h zu generieren, meine Tests geschrieben und alles hat ordnungsgemäß funktioniert.
Später habe ich die Swift-Datei gelöscht, weil ich dachte, ich brauche sie nicht (der gesamte Code des Hauptziels befindet sich in Objective-C ... Ich habe nur Tests in Swift geschrieben).
Ich habe erst später ein Problem bemerkt, nachdem ich einen "Clean / Clean Build-Ordner" erstellt hatte und das Problem "Kein solches Modul" aufgetreten war. Nach einigem Kopfkratzen fügte ich eine neue leere Swift-Datei hinzu und das Problem verschwand.
Ich habe es mehrmals mit / ohne die Swift-Datei getestet und es funktioniert nur damit. Daher muss ich entweder die leere Datei im Projekt belassen, Objective-C in Swift konvertieren oder einige hinzufügen neuer Code für das in Swift geschriebene Projekt.
quelle
Für diejenigen, die bis zur letzten Antwort gescrollt haben und immer noch nichts funktioniert hat, hier ist, was es für mich getan hat, nachdem ich alle anderen Antwortempfehlungen befolgt habe. Ich benutze Xcode 11:
Was das Problem in meinem Fall verursachte, war, dass ich meinen Produktnamen geändert habe
Ich wusste nicht, dass das Ändern des Produktnamens auch den Produktmodulnamen ändern würde , der für den Modulimport in meinen Testdateien verwendet wird. Ich habe meinen Import wie folgt geändert:
@testable import New_Name
Es funktionierte
Ich hoffe, es hilft
quelle
Nachdem ich ein paar Tage mit diesen Themen verbracht habe, schaffe ich es endlich, mit meinem Projekt zu arbeiten. Das Problem lag im Bridging-Header - Der Pfad im Testziel kann nicht leer sein, wenn Sie den Bridging-Header in Ihrem Hauptziel verwenden
Hoffe, es wird etwas Zeit für jemanden sparen.
quelle
Stellen Sie sicher, dass sich unter der Build-Einstellung des Testschemas das Testziel in der Liste befindet.
Wählen Sie neben der Wiedergabetaste das Testschema und dann Schema bearbeiten ... aus, gehen Sie zum Abschnitt Erstellen, klicken Sie auf Plus + und wählen Sie das Ziel aus, gegen das Sie testen möchten.
In meinem Fall haben wir ein internes Ziel, mit dem wir entwickeln (ein paar kleine Unterschiede), und nach einer Zusammenführung wurde es aus der Testkonfiguration entfernt.
quelle
Hier ist noch eine andere Sache zu überprüfen, die nicht aufgeführt ist. Für mich hatte das etwas mit meinem Team zu tun, vielleicht weil der Agent unseres Teams der neuesten Lizenzvereinbarung noch nicht zugestimmt hatte! Nachdem ich in den allgemeinen Einstellungen meines Ziels ein anderes Team ausgewählt und dann ein bestimmtes Bereitstellungsziel wie 12.1 oder 11.0 angegeben hatte, verschwand plötzlich die Warnung "Kein solches Modul".
quelle
In meinem Fall hatte ich 3 Probleme. Das erste war, dass ich den Importpfad angeben musste in:
Das zweite war, dass ich Pods verwendete und diese Pods auch in meine Tests importieren musste, indem ich:
Als drittes habe ich einen Bridging-Header in meinem Ziel verwendet, daher musste ich den Bridging-Header angeben, damit er für den Test identisch ist.
quelle
Mein Problem war, dass die Klasse, die ich testen wollte, in einem separaten Modul (API-Client) sein sollte, aber die Klasse war tatsächlich ein Mitglied des App-Ziels und nicht des Framework-Ziels. Durch Ändern der Zielmitgliedschaft der Klasse wurde der Importfehler behoben!
quelle
Umgebung: Xcode Version 9.0 (9A235)
Szenario: Testen eines Open-Source-Frameworks.
Ich hatte das gleiche Problem: 'Kein solches Modul'.
Lösung:
Hier ist die Testdatei:
quelle
Ich hatte das gleiche Problem. Das Bereinigen des Build-Ordners und das Neustarten von Xcode funktionierten nicht.
Für mich hat es funktioniert, sicherzustellen, dass die Einstellung für "Nur aktive Architektur erstellen" Ihres Testziels und Schemas mit der Einstellung des Ziels und Schemas Ihrer App übereinstimmt.
quelle
Ich folgte den obigen Schritten, die funktionierten. Mein Projekt hatte jedoch einige weitere Probleme. Ich habe diese Warnung erhalten und konnte von meinem Hauptprojekt aus nicht auf Klassen zugreifen, um sie in meinem Testziel zu testen.
Ich habe festgestellt, dass der Name Ihres Testziel-Produktmoduls (YourTestTarget -> Build-Einstellungen -> Suchen nach
product module
) nicht mit Ihrem Projektnamen identisch sein kann.Nachdem ich den Produktmodulnamen für mein Testziel geändert hatte, funktionierte alles.
quelle
Meine Lösung ist hier.
Klicken Sie zuerst auf OdeAlSwiftUITest.swift und überprüfen Sie dann Project TargetName in der Zielmitgliedschaft.
quelle
Klicken Sie im Projektnavigator auf MyAppTests.swift, klicken Sie auf das rechte Feld und überprüfen Sie Ihr Modul in der Zielmitgliedschaft. Es funktioniert in meinem.
quelle
Ich habe alle Antworten hier ausprobiert, aber die rote Fahne würde nicht verschwinden. Aber ich habe es zum Laufen gebracht, indem ich trotzdem einen leeren Test "ausgeführt" habe, und es hat sich geklärt.
Dinge, die ich sicherstellen möchte, sind erledigt:
quelle
Für mich bestand die Lösung darin, @testable import myproject_ios in @testable import myproject umzubenennen, nachdem ich den Produktnamen des Ziels myproject-ios in Build-Einstellungen / Verpackung / Produktname / von $ {TARGET_NAME} in myproject aktualisiert hatte.
quelle
Dies wurde für mich behoben, als ich das Bereitstellungsziel von 9.3 auf 11.0 änderte .
Allgemein> Bereitstellungsziel> "11.0"
quelle
Wenn Sie xcodebuild verwenden und dieses Problem feststellen, sollten Sie dem Befehl build ein Arbeitsbereich-Flag hinzufügen.
Dies wurde geändert
Dazu
quelle
Überprüfen Sie im Testziel für Build-Einstellungen den Host-Test. Er nimmt den in PRODUCT_NAME festgelegten Namen an. Diesen Namen sollten Sie in Testklassen verwenden.
Ich empfehle, PRODUCT_NAME (Übereinstimmungsname des Hauptziels) nicht zu ändern.
quelle
CocoaPods empfiehlt
inherit! :search_paths
, Ihr Testziel wie folgt zu erweitern :Quelle: https://github.com/CocoaPods/CocoaPods/pull/8423#issue-244992565
quelle
Wie in dieser Antwort beschrieben, habe ich einem Nur-Obj-C-Projekt Swift-Tests hinzugefügt. Die Lösung bestand darin, eine Dummy-Swift-Klasse hinzuzufügen. Danach forderte Xcode auf, einen Bridging-Header hinzuzufügen, und entfernte dann die Swift-Klasse. Danach war alles in Ordnung.
quelle
Zusätzlich zu den anderen aufgelisteten Dingen musste ich die Datei mit der Klasse, die ich testen wollte, zu meinen Kompilierungsquellen für das Unit-Test-Modul hinzufügen
quelle
Ich denke, dies ist möglicherweise passiert, weil ich die Beispieltests gelöscht habe.
Ich entfernte das Unit-Test-Bundle und fügte es wieder hinzu, wie in den folgenden Bildern gezeigt, und alles war wieder in Ordnung.
quelle