Das zugrunde liegende Modul für XCTest kann nicht geladen werden

180

Ich arbeite schnell an Xcode und standardmäßig wird eine Testdatei erstellt, die auf XCTest verweist.

Wenn ich die Zielmitgliedschaft für mein Hauptprojekt festlege, verursacht dies diesen Fehler

Das zugrunde liegende Modul für XCTest kann nicht geladen werden

Wenn diese Zielmitgliedschaft nicht festgelegt ist, werden die Tests ordnungsgemäß ausgeführt und alles funktioniert einwandfrei.

PS: Ich bin neu in Swift und es ist wahrscheinlich eine dumme Frage (bitte klären Sie mich auf)

brduca
quelle
17
Es gibt keine dummen Fragen Heuschrecke, nur dumme Fragesteller. ;-) Tolle Frage, da jeder, der dies liest, das gleiche Problem haben wird.
Lance Kind

Antworten:

167

Das Hauptprojekt ist nicht mit dem XCUnit-Framework verknüpft. Sie sollten ein separates Testziel für Ihr Projekt erstellen, falls noch keines vorhanden ist, und Ihre Testquelldateien zu diesem Ziel hinzufügen.

  1. Wählen Sie Ihr Projekt im Projektnavigator aus. Dadurch werden die Projekteinstellungen im Editor geöffnet.
  2. Klicken Sie unten in der Spalte, in der Ihre Ziele aufgelistet sind, auf die Schaltfläche "+".

Geben Sie hier die Bildbeschreibung ein

  1. Wenn Sie an einer iOS-Projektvorlage arbeiten , wählen Sie iOS > Test > iOS Unit Testing Bundle.

    Wenn Sie an einer OS X-Projektvorlage arbeiten , wählen Sie OS X > Test > OS X Unit Testing Bundle.

pwc
quelle
3
In der Zwischenzeit heißt es für iOS iOS UITesting Bundle (verwenden Sie es für UI-Tests) oder iOS Unit Testing Bundle (es ist für Unit Tests ...)
kuzdu
183

Stellen Sie sicher, dass sich die betreffende Datei nicht im Hauptziel befindet, sondern nur im Testziel. Nur das Testziel kann dieses Framework importieren.

Aaron Zinman
quelle
16
Wenn es hilft. Wählen Sie Ihr Ziel "Nicht testen" -> Phasen erstellen -> Quellen kompilieren. Stellen Sie sicher, dass sich Ihre "ClassTest.swift" nicht im normalen Build-Ziel befindet.
Nick N
Und wenn es sich im Hauptpaket und im Testpaket befindet, wie entfernen Sie es aus dem Hauptpaket?
James Robinson
1
Danke @NickN, du hast auf das genaue Problem hingewiesen, das ich hatte und das ist jetzt behoben!
Naishta
Wenn es sich auf dem Testziel befindet, kann ich scheinbar nicht auf eine meiner Haupttestmethoden in meinem Hauptziel zugreifen.
UKDataGeek
danke es hat wie ein Zauber funktioniert. Nur das Entfernen der Testdateien hat funktioniert.
Ccr
32

Sie haben gerade Ihre Testdatei / -klasse zum Hauptziel und nicht versehentlich zum Testziel hinzugefügt. So einfach ist das.

Lösung:

1) Entfernen Sie die Testdatei aus der Liste "Quellen kompilieren" auf der Registerkarte "Phasen erstellen" für das Hauptziel

2) Fügen Sie dieselbe Datei in "Quellen kompilieren" auf der Registerkarte "Phasen erstellen" für das Testziel hinzu

Es muss das Problem beheben

Alfishe
quelle
15

Ich erhalte diese Fehlermeldung, wenn ich ein dynamisches MacOS-Framework-Ziel erstelle, auf das verwiesen wird XCTest.framework (das Ziel ist ein Framework-Ziel, kein Testziel!).

In diesem Fall wird das Problem durch Hinzufügen gelöst

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

zu "Build Settings / Framework Search Paths" des Projekts.

Stanislav Pankevich
quelle
Perfekt! Vielen Dank!
Lance Kind
9
Besser: $(PLATFORM_DIR)/Developer/Library/Frameworksfalls Sie mehrere Versionen von Xcode unter verschiedenen Namen installiert haben (z. B. Release- und Beta-Versionen).
Rob Mayoff
Danke @robmayoff das war die richtige Lösung ;-)
Oliver Pearmain
Dies ist die richtige Antwort beim Erstellen eines Frameworks zum Testen der Unterstützung.
Daniel Wood
7

Nach vielen Problemen bei der Fehlerbehebung und beim Stöbern auf Stack Overflow-Seiten wie dieser gelang es mir, ein Detail zu finden, das auf den anderen Seiten zur Fehlerbehebung bei iOS Unit Test nicht erwähnt wurde.

Wenn Ihr Projekt CocoaPods verwendet, stellen Sie sicher, dass Ihr Testziel im Ziel Ihrer Hauptanwendung verschachtelt ist. Ihre Poddatei enthält sie möglicherweise nicht, wenn Sie Ihr Testziel nach dem Ausführen erstellt haben pod init. Ihre Poddatei sollte ungefähr so ​​aussehen:

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

Denken Sie daran, Ihre Poddatei zu speichern und auszuführen pod install .

Ich hoffe es hilft!

Orlando G Rodriguez
quelle
5

Das ist vielleicht etwas spät, aber was Sie tun müssen, ist:

Klicken Sie auf Datei> Neu> Ziel> iOS Unit Testing Bundle.

Und fügen Sie dann Ihre Tests dort hinzu. Das hat bei mir funktioniert. Das Problem war, dass ich beim Erstellen meines Projekts nicht Unit-Tests erstellen ausgewählt habe. Hoffe das hilft jemandem.

Clinton D'Souza
quelle
2

Dieses Problem tritt in Ihrem Projekt zweimal auf.

  1. Wenn Sie UnitTestingBundle beim Erstellen eines neuen Projekts nicht zu Ihrem Projekt hinzufügen.
  2. Wenn Sie CocoaPods manchmal nicht jedes Mal in Ihrem Projekt installieren.

1: Antwort:

  • Zur Datei gehen Klicken Sie auf Datei.

  • Dann sehen Sie Erste Option Neu Klicken Sie darauf.

  • Nachdem Sie darauf geklickt haben, sehen Sie einige Optionen. Klicken Sie auf Ziel.

  • Und dann wird in der Suchleiste das IOS Unit Testing Bundle und Add Problem gelöst.

  • Wenn der Compiler Ihnen keine Berechtigung zum Hinzufügen geben kann, versuchen Sie es mit der zweiten Methode, wenn unten angegeben.

2. Beantworten Sie das CocoaPod-Problem:

  • Zum Produkt gehen Klicken Sie auf das Produkt.

  • Klicken Sie auf Reinigen oder drücken Sie cmd + k.

  • Das Problem ist gelöst.

Zeeshan Dar
quelle
2

Während die akzeptierte Antwort dieses Problem meistens löst, gibt es noch eine Möglichkeit, auf diesen Fehler zu stoßen.

Wenn Sie dies bereits sichergestellt haben:

Wie von @pwc @ nick-n und anderen hervorgehoben

  1. Die ClassTest.swiftDatei für die Zielmitgliedschaft, indem sichergestellt wird, dass dies nur der Fall ist an das Testziel angehängt ist.
  2. Das ClassTest.swiftist unter Ihrem Haupt-App-Ziel> Quellen erstellen> Quellen kompilieren nicht sichtbar

Folgendes können Sie noch überprüfen:

in Ihrer .podspecsDatei

Stellen Sie sicher, dass Ihr source_filesdas Testverzeichnis nicht direkt oder indirekt enthält.

zum Beispiel :

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

Beachten Sie, dass dies Classes/**/*.{swift}alles beinhaltet, was die Tatsache außer Kraft setzt, dass das Verzeichnis MyPodProjTestsausgeschlossen werden muss.

Lösung:

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

Hinweis: Dies ist ein äußerst Randfall und ein völlig menschliches Versagen, aber ich dachte, es lohnt sich, darauf hinzuweisen.

das Sommerzeichen
quelle
Ausgezeichnete Bemerkung, ich hatte alles in meine aufgenommen s.source_files. Vielen Dank!
Mauricio Chirino
1

Stellen Sie sicher, dass die Zielmitgliedschaft für alle Module deaktiviert ist, wenn das Testframework ausgewählt ist. Sie können die Option Zielmitgliedschaft anzeigen, indem Sie Ansicht-> Dienstprogramme-> Dateiinspektor anzeigen auswählen

Karma
quelle
1

In meinem Fall machte ich die Tests für einen privaten Pod, also war in der Podspec wie folgt:

s.test_spec 'Tests' do |test_spec|
test_spec.source_files = 'Tests/*.swift' end

Aber im Podfile habe ich vergessen, die Testspezifikation als solche mitzubringen:

target 'MyApp' do
use_frameworks!
pod 'CoconutLib', '~> 1.0', :testspecs => ['Tests'] end
Hugo Jordao
quelle
0

Ich habe alles oben Genannte getan, aber ich durfte trotzdem nicht auf die Methoden zugreifen, die ich testen wollte. Aber bevor ich einen Testfall schrieb, baute ich das Projekt einmal und dann waren die Methoden zum Testen zugänglich. Probieren Sie es aus und lassen Sie mich wissen, ob es ein Problem gelöst hat.

Sunil Chayagol
quelle
0

Ich hatte das gleiche Problem und die Lösung für mich war:

  1. Wählen Sie mein Schema
  2. Schema bearbeiten ...
  3. Wenn das Schemakonfigurationsfenster geöffnet wird, wählen Sie die linke Registerkarte "Test", die hier umgeleitet werden soll: Geben Sie hier die Bildbeschreibung ein
  4. Wie Sie sehen können, werden meine UITests hier nicht hinzugefügt, sondern sind in meinem Projekt vorhanden. Ich musste also nur auf die Plus-Schaltfläche tippen und mein UITests-Ziel wie folgt auswählen: Geben Sie hier die Bildbeschreibung ein
  5. Tippen Sie anschließend auf die Schaltfläche "Hinzufügen" und schließen Sie die Konfigurationsansicht
  6. Beenden Sie mit einem sauberen Projekt und versuchen Sie es erneut, es sollte funktionieren
  7. Und vergessen Sie nicht, dies ebenfalls zu überprüfen: https://developer.apple.com/library/archive/qa/qa1954/_index.html

Hoffe diese Antwort wird helfen.

PS: Ein letzter Gedanke in meinem Testziel in den Build-Einstellungen: Ich musste diese Eigenschaft überprüfen, die nicht richtig konfiguriert war:

DEBUG_INFORMATION_FORMAT = dwarf; 
ONLY_ACTIVE_ARCH = YES;
VALIDATE_PRODUCT = NO;
O. Boujaouane
quelle
0

Genau wie @Alfishe oben erwähnt:

Sie müssen die Testdateien von Compiler Sourcesunter entfernenBuild Phases

Wie nachfolgend dargestellt


Geben Sie hier die Bildbeschreibung ein

Suhaib
quelle
1
Wenn Sie das tun, können Sie die Tests, soweit ich weiß, nicht ausführen
Juan Curti
0

Überprüfen Sie die Zielmitgliedschaft Ihrer Testklasse.

Denis Kutlubaev
quelle