XCTest için temel modül yüklenemiyor


180

Hızlı Xcode üzerinde çalışıyorum ve varsayılan olarak XCTest referans bir test dosyası oluşturur.

Hedef üyeliğimi ana projeme ayarladığımda bu hataya neden oluyor

XCTest için temel modül yüklenemiyor

Bu hedef üyelik ayarlanmazsa, testler düzgün çalışır ve her şey yolunda gider.

Not: Hızlı bir şekilde yeniyim ve muhtemelen aptalca bir soru (lütfen beni aydınlatın)


17
Dilsiz sorular çekirge, sadece dilsiz sorular var. ;-) Bunu okuyan herkes gibi harika bir soru aynı soruna sahip olacak.
Lance Kind

Yanıtlar:


168

Ana proje XCUnit çerçevesine bağlanmaz. Henüz mevcut değilse, projeniz için ayrı bir test hedefi oluşturmalı ve test kaynağı dosyalarınızı bu hedefe eklemelisiniz.

  1. Proje Gezgini'nde projenizi seçin. Bu, projenin ayarlarını editörde açar.
  2. Hedeflerinizi listeleyen sütunun altındaki "+" düğmesini tıklayın.

resim açıklamasını buraya girin

  1. Bir iOS proje şablonu üzerinde çalışıyorsanız , öğesini seçin iOS > Test > iOS Unit Testing Bundle.

    Bir OS X proje şablonu üzerinde çalışıyorsanız , öğesini seçin OS X > Test > OS X Unit Testing Bundle.


3
Bu arada iOS için buna iOS UITesting Bundle (UI Testleri için kullanın) veya iOS Unit Testing Bundle (Birim Testleri için ...)
denir

184

Söz konusu dosyanın ana hedefte değil, yalnızca test hedefinde olup olmadığını iki kez kontrol edin. Yalnızca test hedefi içe aktarılacak bu çerçeveye sahip olacaktır.


16
Eğer yardımcı olursa. 'Test Dışı' Hedefinizi -> Derleme Aşamalarını -> Kaynakları Derle'yi seçin. "ClassTest.swift" öğenizin normal oluşturma hedefinde olmadığından emin olun.
Nick N

Ve eğer ana paket ve test paketindeyse, ana paketten nasıl kaldırabilirsiniz.
James Robinson

1
@NickN teşekkürler, ben yaşadım ve şu anda düzeltildi kesin konuya dikkat!
Naishta

Test Hedefi üzerindeyse, ana Hedefimdeki ana test yöntemlerime erişemiyorum.
UKDataGeek

teşekkürler bir cazibe gibi çalıştı. sadece test dosyalarını kaldırarak çalıştı.
Ccr

32

Test dosyanızı / sınıfınızı yanlışlıkla test hedefine değil, ana hedefe eklediniz. Bu kadar basit.

Çözüm:

1) Test dosyasını ana hedef için "Derleme Aşamaları" sekmesindeki "Kaynakları Derle" listesinden kaldırın

2) Test hedefi için "Derleme Aşamaları" sekmesindeki "Kaynakları Derle" ye aynı dosyayı ekleyin

Sorunu çözmeli


15

Bağlantı veren bir macOS dinamik çerçeve hedefi oluşturursam bu hatayı alıyorum XCTest.framework(hedef bir test hedefi değil, bir çerçeve hedefidir!).

Bu durumda sorun,

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

projenin "Derleme Ayarları / Çerçeve Arama Yolları" na.


Mükemmel! Teşekkürler!
Lance Kind

9
Daha iyi: $(PLATFORM_DIR)/Developer/Library/FrameworksFarklı adlar altında kurulu birden çok Xcode sürümünüz olması durumunda (örneğin, sürüm ve beta sürümleri).
rob mayoff

Teşekkürler @robmayoff bu doğru çözümdü ;-)
Oliver Pearmain

Bu, desteği test etmek için bir çerçeve oluştururken doğru cevaptır.
Daniel Wood

7

Bunun gibi Stack Overflow sayfalarında çok sayıda sorun giderme ve zıplatmadan sonra, diğer iOS Birim Testi sorun giderme sayfalarında belirtilmeyen bir ayrıntı bulmayı başardım.

Projeniz CocoaPods kullanıyorsa, test hedefinizi ana uygulamanızın hedefinin içine yerleştirdiğinizden emin olun. Eğer test hedefini oluşturduysanız, podfile dahil olmayabilir sonra çalışan pod init. Pod dosyanız şu şekilde görünmelidir:

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

Pod dosyalarınızı kaydetmeyi ve çalıştırdıktan pod installsonra çalıştırmayı unutmayın .

Umarım yardımcı olur!


5

Bu biraz geç olabilir ama yapmanız gereken:

Dosya> Yeni> Hedef> iOS Birim Test Paketi'ni tıklayın.

Ve sonra testlerinizi oraya ekleyin. Bu benim için çalıştı. Sorun, projemi oluştururken birim testleri oluştur'u seçmememdi. Umarım bu birine yardımcı olur.


2

Bu sorun, projenizde iki kez oluşur.

  1. Yeni bir proje oluştururken projenize UnitTestingBundle eklemediğinizde.
  2. CocoaPod'ları Projenize her zaman yüklediğinizde.

1: Cevap:

  • Dosyaya Git Dosya'ya tıklayın.

  • Sonra İlk seçeneğini görüyorsunuz Yeni Tıklayın.

  • Üzerine tıkladıktan sonra Hedef üzerinde Bazı Seçenek Tıklaması görürsünüz.

  • Ve sonra Arama Çubuğu Arama IOS Ünitesi Test Paketi ve Ekleme Sorunu çözüldü.

  • Derleyici bunu eklemek için izin veremezse, aşağıda verildiğinde İkinci Yöntemi deneyin.

2. CocoaPod Sorununu Cevaplayın:

  • Ürüne Git Ürüne tıklayın.

  • Temiz tıklayın veya cmd + k tuşlarına basın.

  • Sorun çözüldü.


2

Kabul edilen cevap çoğu kez bu sorunu çözse de, bu hatayla karşılaşmanın bir yolu daha vardır.

Bunu zaten sağladıysanız:

@Pwc @ nick-n ve diğerleri tarafından işaret edildiği gibi

  1. ClassTest.swiftO edilmesini sağlayarak hedef üyelik için dosya sadece test hedefine bağlı.
  2. ClassTest.swiftOlduğu değil ana uygulama hedef> Yapı Kaynaklar> Derleme Kaynakları altında görünür

İşte başka neler kontrol edebilirsiniz:

senin .podspecsdosyasında

source_filesTest dizinini doğrudan veya dolaylı olarak içermediğinden emin olun .

Örneğin :

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

Not Classes/**/*.{swift}dizini gerçeğini basan her şeyi içerir MyPodProjTestsekarte edilmelidir.

Çözüm:

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

Not: Bu son derece önemli bir durum ve tamamen insan hatası ama dikkat çekmeye değer olacağını düşündüm.


Mükemmel açıklama, ben her şeyi dahil etmişti benim s.source_files. Teşekkürler!
Mauricio Chirino

1

Test çerçevesi seçildiğinde, hedef üyeliğin tüm modüller için işaretli olmadığından emin olun. Hedef Üyelik seçeneğini, Görünüm-> Yardımcı Programlar-> Dosya Denetçisini Göster'i seçerek görüntüleyebilirsiniz


1

Benim durumumda, özel bir kapsül için testler yapıyordum, bu yüzden podspec'de şöyle oldu:

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

Ancak Podfile'da test spesifikasyonunu getirmeyi unuttum, şöyle:

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

0

Yukarıdakilerin hepsini yaptım, ancak yine de test etmek istediğim yöntemlere erişime izin verilmedi. Ama herhangi bir test senaryosu yazmadan önce projeyi bir kez inşa ettim ve daha sonra metotlar test edilebilirdi. Bu yüzden deneyin ve herhangi bir sorunun çözülüp çözülmediğini bana bildirin.


0

Aynı sorunu yaşadım ve benim için çözüm:

  1. Şemamı seç
  2. Düzeni Düzenle ...
  3. Ardından Şema yapılandırma penceresi açıldığında, buraya yönlendirilecek "Test" adlı sol sekmeyi seçin: resim açıklamasını buraya girin
  4. Gördüğünüz gibi UITest'lerim buraya eklenmedi, ancak projemde var, bu yüzden sadece artı düğmesine dokunup UITests hedefimi böyle seçmek zorunda kaldım: resim açıklamasını buraya girin
  5. Ardından "Ekle" düğmesine hafifçe vurun ve yapılandırma görünümünü kapatın
  6. Temiz bir proje ile bitirin ve tekrar çalışmalı
  7. Bunu da doğrulamayı unutmayın: https://developer.apple.com/library/archive/qa/qa1954/_index.html

Umarım bu cevap yardımcı olacaktır.

PS: yapı ayarları Test hedefimi bir son düşünüyorum Ben doğru yapılandırılmamış bu özelliği kontrol etmek zorunda kaldı:

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

0

Aynen yukarıda @Alfishe'de bahsedildiği gibi:

Sen test dosyaları kaldırmak zorunda Compiler SourcesunderBuild Phases

Aşağıda gösterildiği gibi


resim açıklamasını buraya girin


1
Bunu yaparsanız, bildiğim kadarıyla testleri yapamazsınız
Juan Curti


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.