Impossibile caricare il modulo sottostante per XCTest


180

Sto lavorando rapidamente su Xcode e per impostazione predefinita crea un file di test che fa riferimento a XCTest.

Quando imposto l'appartenenza di destinazione al mio progetto principale provoca questo errore

Impossibile caricare il modulo sottostante per XCTest

Se questo abbonamento di destinazione non è impostato, i test vengono eseguiti correttamente e tutto funziona correttamente.

PS: sono nuovo per la rapida ed è probabilmente una domanda stupida (per favore illuminami)


17
Non ci sono domande stupide, cavalletta, solo stupidi interrogatori. ;-) Ottima domanda dato che chiunque leggerà questo avrà lo stesso problema.
Lance Kind,

Risposte:


168

Il progetto principale non si collega al framework XCUnit. È necessario creare un target di test separato per il progetto, se non esiste già, e aggiungere i file di origine del test a tale target.

  1. Seleziona il tuo progetto nel Project Navigator. Questo aprirà le impostazioni del progetto nell'editor.
  2. Fai clic sul pulsante "+" nella parte inferiore della colonna che elenca i tuoi target.

inserisci qui la descrizione dell'immagine

  1. Se stai lavorando su un modello di progetto iOS , seleziona iOS > Test > iOS Unit Testing Bundle.

    Se stai lavorando su un modello di progetto OS X , seleziona OS X > Test > OS X Unit Testing Bundle.


3
Nel frattempo per iOS si chiama iOS UITesting Bundle (usalo per i test dell'interfaccia utente) o iOS Unit Testing Bundle (è per i test delle unità ...)
kuzdu,

184

Controlla che il file in questione non sia nella destinazione principale, ma solo nella destinazione del test. Solo il target del test avrà quel framework da importare.


16
Se aiuta Seleziona il tuo target 'Non Test' -> Crea fasi -> Compila fonti. Assicurati che il tuo "ClassTest.swift" non sia nella normale destinazione di compilazione.
Nick N,

E se si trova nel bundle principale e nel bundle di test come lo si rimuove dal bundle principale.
James Robinson,

1
Grazie @NickN, hai sottolineato il problema esatto che stavo riscontrando e che ora è stato risolto!
Naishta,

SE si trova sul Target Test, quindi non riesco ad accedere a nessuno dei miei metodi di test principali nel mio Target principale.
UKDataGeek,

grazie ha funzionato come un fascino. semplicemente rimosso i file di test ha funzionato.
Ccr,

32

Hai appena aggiunto il tuo file / classe test al target principale e non al target test per errore. Semplice come quella.

Soluzione:

1) Rimuovere il file di prova dall'elenco "Compila origini" nella scheda "Crea fasi" per la destinazione principale

2) Aggiungi lo stesso file in "Compila origini" nella scheda "Crea fasi" per la destinazione del test

Deve risolvere il problema


15

Ottengo questo errore se creo un target di framework dinamico macOS, che si collega a XCTest.framework(il target è un target del framework, non un target di test!).

In questo caso il problema viene risolto aggiungendo

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

al progetto "Build Settings / Framework Search Paths".


Perfetto! Grazie!
Lance Kind

9
Meglio: $(PLATFORM_DIR)/Developer/Library/Frameworksnel caso in cui siano installate più versioni di Xcode con nomi diversi (ad es. Versioni di rilascio e beta).
Rob Mayoff

Grazie @robmayoff questa è stata la soluzione corretta ;-)
Oliver Pearmain il

Questa è la risposta corretta quando si costruisce un framework per testare il supporto.
Daniel Wood,

7

Dopo un sacco di risoluzione dei problemi e di rimbalzare su pagine Stack Overflow come questa, sono riuscito a trovare un dettaglio che non è stato menzionato nelle altre pagine di risoluzione dei problemi di Test unità iOS.

Se il tuo progetto utilizza CocoaPods, assicurati di includere il target di test nidificato all'interno del target dell'applicazione principale. Il tuo podfile potrebbe non includerlo se hai creato il target del test dopo l' esecuzione pod init. Il tuo podfile dovrebbe assomigliare a questo:

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

Ricorda di salvare il tuo podfile ed eseguirlo pod installdopo averlo fatto.

Spero che sia d'aiuto!


5

Questo forse un po 'tardi, ma quello che devi fare è:

Fare clic su File> Nuovo> Destinazione> Pacchetto test unit unità iOS.

E poi aggiungi i tuoi test lì dentro. Questo ha funzionato per me. Il problema era che non ho selezionato creare unit test quando ho creato il mio progetto. Spero che questo aiuti qualcuno.


2

Questo problema si verifica due volte nel progetto.

  1. Quando non aggiungi UnitTestingBundle nel tuo progetto quando crei un nuovo progetto.
  2. Quando installi CocoaPods nel tuo progetto a volte non tutte le volte.

1: Risposta:

  • Vai al file Fai clic su File.

  • Quindi vedi la prima opzione Nuovo Fai clic su di essa.

  • Dopo aver cliccato su di esso, vedi alcune opzioni Fai clic su Target.

  • E poi nella barra di ricerca Search IOS Unit Testing Bundle and Add Problem è risolto.

  • se il compilatore non può darti il ​​permesso di aggiungerlo, prova il secondo metodo quando viene indicato di seguito.

2. Rispondi al problema CocoaPod:

  • Vai al prodotto Fare clic sul prodotto.

  • Fare clic su clean o premere cmd + k.

  • Problema risolto.


2

Mentre la risposta accettata risolve questo problema per la maggior parte delle volte, c'è un altro modo in cui puoi riscontrare questo errore.

Se hai già assicurato che:

Come sottolineato da @pwc @ nick-n e altri

  1. Il ClassTest.swiftfile per l'appartenenza alla destinazione assicurandosi che sia allegato solo alla destinazione Test.
  2. Il ClassTest.swiftè non visibile sotto di voi principali target di applicazione> Sorgenti Corporatura> Sorgenti di compilazione

Ecco cos'altro puoi controllare:

nel tuo .podspecsfile

Assicurarsi che il proprio source_filesnon includa direttamente o indirettamente la directory di test.

per esempio :

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

Si noti che Classes/**/*.{swift}include tutto ciò che ignora il fatto che la directory MyPodProjTestsdeve essere esclusa.

Soluzione:

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

Nota: questo è un caso estremamente marginale e un errore completamente umano, ma ho pensato che valesse la pena sottolineare.


Ottima osservazione, avevo incluso tutto nel mio s.source_files. Grazie!
Mauricio Chirino,

1

Assicurarsi che l'abbonamento Target sia selezionato per tutti i moduli quando viene selezionato il framework di test. Puoi visualizzare l'opzione Iscrizione abbonamento selezionando Visualizza-> Utilità-> Mostra Impostazioni file


1

Nel mio caso, stavo facendo i test per un pod privato, quindi nel podspec era come:

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

Ma nel Podfile ho dimenticato di portare le specifiche del test, in quanto tale:

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

0

Ho fatto tutto quanto sopra, ma ancora non mi era permesso accedere ai metodi che volevo testare. Ma prima di scrivere qualsiasi caso di test ho costruito il progetto una volta e poi i metodi erano accessibili per il test. Quindi provalo e fammi sapere se ha risolto qualche problema.


0

Ho avuto lo stesso problema e la soluzione per me era:

  1. Seleziona il mio schema
  2. Modifica schema ...
  3. Quindi quando viene aperta la finestra di configurazione dello schema selezionare la scheda sinistra denominata "Test" per essere reindirizzati qui: inserisci qui la descrizione dell'immagine
  4. Come puoi vedere, i miei UITest non vengono aggiunti qui ma esistono nel mio progetto, quindi ho dovuto semplicemente toccare il pulsante più e selezionare il mio target UITest in questo modo: inserisci qui la descrizione dell'immagine
  5. Quindi tocca il pulsante "Aggiungi" e chiudi la vista di configurazione
  6. Termina con un progetto pulito e riprova che dovrebbe funzionare
  7. E non dimenticare di verificarlo anche tu : https://developer.apple.com/library/archive/qa/qa1954/_index.html

Spero che questa risposta possa essere d'aiuto.

PS: un ultimo pensiero nel mio obiettivo Test nelle impostazioni di build ho dovuto controllare queste proprietà che non erano configurate correttamente:

DEBUG_INFORMATION_FORMAT = dwarf; 
ONLY_ACTIVE_ARCH = YES;
VALIDATE_PRODUCT = NO;

0

Proprio come @Alfishe menzionato sopra:

Devi rimuovere i file di test da Compiler SourcessottoBuild Phases

Come mostrato di seguito


inserisci qui la descrizione dell'immagine


1
Se lo fai, non puoi eseguire i test, per quanto ne so
Juan Curti,


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.