web-dev-qa-db-de.com

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

Ich arbeite in Swift mit Xcode und erstellt standardmäßig eine Testdatei, die auf XCTest verweist.

Wenn ich die Zielmitgliedschaft auf mein Hauptprojekt festgelegt habe, tritt dieser Fehler auf

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

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

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

146
brduca

Das Hauptprojekt ist nicht mit dem XCUnit-Framework verknüpft. Sie sollten ein separates Testziel für Ihr Projekt erstellen, sofern noch nicht vorhanden, und Ihre Testquelldateien 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 auf die Schaltfläche "+", um Ihre Ziele anzuzeigen. 
  3. 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

128
pwc

Vergewissern Sie sich noch einmal, dass sich die betreffende Datei nicht im Hauptziel befindet, sondern nur im Testziel. Nur das Testziel hat dieses Framework zum Importieren.

151
Aaron Zinman

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

Lösung:

1) Entfernen Sie die Testdatei aus der Liste "Compile Sources" auf der Registerkarte "Build Phases" für das Hauptziel

2) Fügen Sie dieselbe Datei in "Compile Sources" auf der Registerkarte "Build Phases" für das Testziel ein

Es muss das Problem lösen

24
Alfishe

Dies ist vielleicht etwas spät, aber Sie müssen Folgendes tun: 

Klicken Sie auf Datei> Neu> Ziel> iOS-Einheiten-Testpaket. 

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

5
Clinton D'Souza

Ich erhalte diese Fehlermeldung, wenn ich ein dynamisches macOS-Framework-Ziel erstellt habe, das mit XCTest.framework verlinkt ist (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.

4

Nach vielen Fehlerbehebungen und Aufrufen von Stack Overflow-Seiten wie dieser ist es mir gelungen, ein Detail zu finden, das auf den anderen iOS-Gerätetest-Fehlerseiten nicht erwähnt wurde.

Wenn Ihr Projekt CocoaPods verwendet, stellen Sie sicher, dass Ihr Testziel im Ziel Ihrer Hauptanwendung verschachtelt ist. Ihre Pod-Datei enthält sie möglicherweise nicht, wenn Sie Ihr Testziel after running pod init erstellt haben. Ihre Pod-Datei sollte ungefähr so ​​aussehen:

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

Denken Sie daran, Ihre Pod-Datei zu speichern und danach pod install auszuführen.

Ich hoffe es hilft!

2

Dieses Problem tritt zweimal in Ihrem Projekt auf.

  1. Wenn Sie Ihrem Projekt kein UnitTestingBundle hinzufügen, wenn Sie ein neues Projekt erstellen.
  2. Wenn Sie CocoaPods in Ihrem Projekt installieren, ist dies nicht immer der Fall.

1: Antwort:

  • Gehe zu der Datei Klicke auf Datei.

  • Dann sehen Sie Erste Option Neu Klicken Sie darauf.

  • Nach dem Anklicken wird eine Option angezeigt. Klicken Sie auf Ziel. 

  • Und dann in der Searchbar Search IOS Unit Testing Bundle und Add Problem ist gelöst.

  • wenn der Compiler Ihnen keine Berechtigung zum Hinzufügen dieser Option erteilen kann, versuchen Sie die zweite Methode, wenn unten angezeigt wird.

2. CocoaPod-Problem beantworten:

  • Zum Produkt gehen Klicken Sie auf das Produkt.

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

  • Das Problem ist gelöst.

2
zeeshan Dar

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

1
karma

So wie @Alfishe oben erwähnt: 

Sie müssen die Testdateien von Compiler Sources unter Build Phases entfernen. 

Wie nachfolgend dargestellt


 enter image description here

0
Suhaib

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

  1. Wähle mein Schema
  2. Schema bearbeiten ...
  3. Wenn das Fenster zur Konfiguration des Schemas geöffnet ist, wählen Sie den linken Tab "Test" aus, um hier umgeleitet zu werden:  enter image description here
  4. Wie Sie sehen, werden meine UITests hier nicht hinzugefügt, sind aber in meinem Projekt vorhanden. Deshalb musste ich nur auf den Plus-Button tippen und mein UITests-Ziel wie folgt auswählen:  enter image description here
  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 auch zu überprüfen: https://developer.Apple.com/library/archive/qa/qa1954/_index.html

Hoffe, diese Antwort wird helfen.

PS: ein letztes Mal in meinem Testziel in den Build-Einstellungen musste ich diese Eigenschaft überprüfen, die nicht korrekt konfiguriert wurde: 

DEBUG_INFORMATION_FORMAT = dwarf; 
ONLY_ACTIVE_Arch = YES;
VALIDATE_PRODUCT = NO;
0
O. Boujaouane

Ich habe all das getan, aber ich durfte immer noch nicht auf die Methoden zugreifen, die ich testen wollte. Bevor ich jedoch einen Testfall geschrieben habe, wurde das Projekt einmal erstellt, und die Methoden waren dann zum Testen verfügbar. Also probieren Sie es aus und lassen Sie mich wissen, ob es Probleme gelöst hat.

0
sunil chayagol

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

Wenn Sie bereits sichergestellt haben, dass:  

Wie von @pwc @ nick-n und anderen hervorgehoben 

  1. Die ClassTest.Swift-Datei für die Zielmitgliedschaft, indem sichergestellt wird, dass sie only an das Testziel angehängt ist.
  2. Der ClassTest.Swift ist nicht sichtbar unter Ihrem Hauptanwendungsziel> Quellen erstellen> Quellen kompilieren

Folgendes kannst du noch prüfen:

in Ihrer .podspecs-Datei 

Stellen Sie sicher, dass Ihr source_files das 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 Classes/**/*.{Swift} alles enthält, was die Tatsache außer Kraft setzt, dass das Verzeichnis MyPodProjTests ausgeschlossen werden muss. 

Lösung:  

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

Anmerkung: Dies ist ein extremer Fall und völlig menschliches Versagen, aber ich dachte, dass es sich lohnt, darauf hinzuweisen. 

0
thesummersign