ไม่สามารถโหลดโมดูลพื้นฐานสำหรับ XCTest


180

ฉันทำงานอย่างรวดเร็วใน Xcode และโดยค่าเริ่มต้นจะสร้างไฟล์ทดสอบที่อ้างอิง XCTest

เมื่อฉันตั้งค่าความเป็นสมาชิกเป้าหมายเป็นโครงการหลักของฉันมันทำให้เกิดข้อผิดพลาดนี้

ไม่สามารถโหลดโมดูลพื้นฐานสำหรับ XCTest

หากไม่ได้ตั้งค่าการเป็นสมาชิกเป้าหมายการทดสอบจะทำงานอย่างถูกต้องและทุกอย่างทำงานได้ดี

PS: ฉันใหม่เพื่อรวดเร็วและอาจเป็นคำถามโง่ (โปรดสอนฉัน)


17
ไม่มีตั๊กแตนคำถามโง่เป็นเพียงคำถามโง่ ;-) คำถามที่ยอดเยี่ยมเพราะทุกคนที่อ่านข้อความนี้จะมีปัญหาเดียวกัน
แลนซ์ใจดี

คำตอบ:


168

โครงการหลักไม่เชื่อมโยงกับกรอบงาน XCUnit คุณควรสร้างเป้าหมายการทดสอบแยกต่างหากสำหรับโครงการของคุณหากยังไม่มีอยู่และเพิ่มไฟล์ต้นฉบับทดสอบของคุณไปยังเป้าหมายนั้น

  1. เลือกโครงการของคุณใน Project Navigator นี่จะเป็นการเปิดการตั้งค่าของโครงการในเครื่องมือแก้ไข
  2. คลิกปุ่ม "+" ที่ด้านล่างของคอลัมน์ที่แสดงรายการเป้าหมายของคุณ

ป้อนคำอธิบายรูปภาพที่นี่

  1. หากคุณกำลังทำงานในโครงการแม่แบบ iOS ของคุณiOS > Test > iOS Unit Testing Bundleเลือก

    หากคุณกำลังทำงานในโครงการแม่แบบ OS XOS X > Test > OS X Unit Testing Bundleเลือก


3
สำหรับ iOS นั้นเรียกว่า iOS UITesting Bundle (ใช้สำหรับทดสอบ UI) หรือชุดทดสอบหน่วย iOS (สำหรับการทดสอบหน่วย ... )
kuzdu

184

ตรวจสอบอีกครั้งว่าไฟล์ดังกล่าวไม่ได้อยู่ในเป้าหมายหลัก แต่แทนเฉพาะเป้าหมายการทดสอบ เฉพาะเป้าหมายการทดสอบเท่านั้นที่จะมีกรอบงานที่จะนำเข้า


16
ถ้ามันช่วย เลือกเป้าหมาย 'ไม่ทดสอบ' -> สร้างเฟส -> รวบรวมแหล่งที่มา ตรวจสอบให้แน่ใจว่า "ClassTest.swift" ของคุณไม่ได้อยู่ในเป้าหมายการสร้างปกติ
Nick N

และถ้ามันอยู่ในกลุ่มหลักและชุดทดสอบคุณจะลบออกจากกลุ่มหลักได้อย่างไร
James Robinson

1
ขอบคุณ @NickN คุณได้ชี้ให้เห็นปัญหาที่แน่นอนที่ฉันมีและนั่นได้รับการแก้ไขแล้ว!
Naishta

หากอยู่ในเป้าหมายการทดสอบฉันไม่สามารถเข้าถึงวิธีการทดสอบหลักของฉันในเป้าหมายหลักของฉันได้
UKDataGeek

ขอบคุณมันใช้งานได้เหมือนมีเสน่ห์ เพียงแค่ลบไฟล์ทดสอบที่ทำงาน
Ccr

32

คุณเพิ่งเพิ่มไฟล์ทดสอบ / ชั้นเรียนของคุณลงในเป้าหมายหลักและไม่เข้าสู่เป้าหมายทดสอบโดยไม่ได้ตั้งใจ เรียบง่ายเหมือนที่

สารละลาย:

1) ลบไฟล์ทดสอบออกจากรายการ "รวบรวมแหล่งที่มา" ในแท็บ "สร้างเฟส" สำหรับเป้าหมายหลัก

2) เพิ่มไฟล์เดียวกันลงใน "แหล่งรวบรวม" บนแท็บ "บิลด์เฟส" สำหรับเป้าหมายการทดสอบ

มันจะต้องแก้ไขปัญหา


15

ฉันได้รับข้อผิดพลาดนี้หากฉันสร้างเป้าหมายเฟรมเวิร์กแบบไดนามิก macOS ซึ่งเชื่อมโยงไปยัง XCTest.framework (เป้าหมายคือเป้าหมายเฟรมเวิร์กไม่ใช่เป้าหมายการทดสอบ!)

ในกรณีนี้ปัญหาจะได้รับการแก้ไขโดยการเพิ่ม

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

ไปที่ "การตั้งค่าการสร้าง / กรอบการค้นหาเส้นทางของโครงการ"


ที่สมบูรณ์แบบ! ขอบคุณ!
Lance Kind

9
ดีกว่า: $(PLATFORM_DIR)/Developer/Library/Frameworksในกรณีที่คุณติดตั้ง Xcode หลายรุ่นภายใต้ชื่ออื่น (เช่นรุ่นที่วางจำหน่ายและรุ่นเบต้า)
rob mayoff

ขอบคุณ @robmayoff นี่เป็นคำตอบที่ถูกต้อง ;-)
Oliver Pearmain

นี่คือคำตอบที่ถูกต้องเมื่อสร้างกรอบสำหรับการทดสอบการสนับสนุน
Daniel Wood

7

หลังจากแก้ไขปัญหาจำนวนมากและตีกลับไปที่หน้า Stack Overflow เช่นหน้านี้ฉันจัดการเพื่อหารายละเอียดหนึ่งที่ไม่ได้กล่าวถึงในหน้าการแก้ไขปัญหาหน่วยทดสอบ iOS อื่น ๆ

หากโครงการของคุณใช้ CocoaPods ตรวจสอบให้แน่ใจว่าได้รวมเป้าหมายการทดสอบที่ซ้อนอยู่ในเป้าหมายหลักของแอปพลิเคชันของคุณ podfile ของคุณอาจไม่รวมมันถ้าคุณสร้างเป้าหมายการทดสอบของคุณหลังจากที่pod initทำงาน podfile ของคุณควรมีลักษณะดังนี้:

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

อย่าลืมบันทึก podfile ของคุณและเรียกใช้ pod installหลังจากทำเช่นนั้น

หวังว่ามันจะช่วย!


5

อาจจะช้าไปหน่อย แต่สิ่งที่คุณต้องทำคือ:

คลิกที่ไฟล์> ใหม่> เป้าหมาย> ชุดทดสอบหน่วย iOS

แล้วเพิ่มการทดสอบของคุณในนั้น สิ่งนี้ใช้ได้สำหรับฉัน ปัญหาคือฉันไม่ได้เลือกสร้างการทดสอบหน่วยเมื่อฉันสร้างโครงการ หวังว่านี่จะช่วยใครซักคน


2

ปัญหานี้เกิดขึ้นสองครั้งในโครงการของคุณ

  1. เมื่อคุณไม่เพิ่ม UnitTestingBundle ในโครงการของคุณเมื่อสร้างโครงการใหม่
  2. เมื่อคุณติดตั้ง CocoaPods ในโครงการของคุณบางครั้งก็ไม่ใช่ทุกครั้ง

1: คำตอบ:

  • ไปที่ไฟล์คลิกที่ไฟล์

  • จากนั้นคุณจะเห็นตัวเลือกแรกใหม่คลิกที่มัน

  • หลังจากคลิกที่มันคุณจะเห็นตัวเลือกบางอย่างคลิกที่เป้าหมาย

  • จากนั้นในชุดการทดสอบ Searchbar Search IOS Bundle และ Add Problem ได้รับการแก้ไข

  • หากคอมไพเลอร์ไม่สามารถให้สิทธิ์คุณในการเพิ่มสิ่งนี้ลองวิธีที่สองเมื่อได้รับด้านล่าง

2. คำตอบปัญหา CocoaPod:

  • ไปที่ผลิตภัณฑ์คลิกที่ผลิตภัณฑ์

  • คลิกที่ทำความสะอาดหรือกด cmd + k

  • แก้ไขปัญหาแล้ว


2

แม้ว่าคำตอบที่ได้รับการยอมรับจะช่วยแก้ปัญหานี้ได้เป็นส่วนใหญ่ แต่ก็มีอีกวิธีหนึ่งที่คุณจะสามารถแก้ไขข้อผิดพลาดนี้ได้

หากคุณมั่นใจแล้วว่า:

ตามที่ระบุไว้โดย @pwc @ nick-n และอื่น ๆ

  1. ClassTest.swiftไฟล์สำหรับการเป็นสมาชิกเป้าหมายโดยมั่นใจว่ามันเป็นเพียงที่แนบมากับเป้าหมายการทดสอบ
  2. ClassTest.swiftคือไม่สามารถมองเห็นได้ภายใต้คุณหลักเป้าหมายแอป> แหล่งรูปร่าง> แหล่งรวบรวม

นี่คือสิ่งที่คุณสามารถตรวจสอบได้:

ใน.podspecsไฟล์ของคุณ

ตรวจสอบให้แน่ใจว่าคุณsource_filesไม่ได้รวมไดเรกทอรีทดสอบโดยตรงหรือโดยอ้อม

ตัวอย่างเช่น :

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

โปรดทราบว่าClasses/**/*.{swift}มีทุกอย่างที่แทนที่ความจริงที่ว่าไดเรกทอรีMyPodProjTestsจะต้องได้รับการยกเว้น

สารละลาย:

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

หมายเหตุ: นี่เป็นคดีขอบอย่างมากและความผิดพลาดของมนุษย์อย่างสมบูรณ์ แต่ฉันคิดว่ามันน่าจะคุ้มค่า


คำพูดที่ยอดเยี่ยมฉันรวมทุกอย่างไว้ในตัวs.source_filesแล้ว ขอบคุณ!
Mauricio Chirino

1

ตรวจสอบให้แน่ใจว่าได้ทำเครื่องหมายการเป็นสมาชิกเป้าหมายสำหรับโมดูลทั้งหมดเมื่อเลือกกรอบการทดสอบ คุณสามารถดูตัวเลือกสมาชิกเป้าหมายได้โดยเลือก View-> Utilities-> Show File Inspector


1

ในกรณีของฉันฉันทำการทดสอบสำหรับพ็อดส่วนตัวดังนั้นในพ็อคสเปคก็เป็นเช่น:

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

แต่ใน Podfile ฉันลืมที่จะนำข้อกำหนดการทดสอบเช่นนี้:

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

0

ฉันทำตามข้างต้นทั้งหมดแล้ว แต่ก็ยังไม่ได้รับอนุญาตให้เข้าถึงวิธีที่ฉันต้องการทดสอบ แต่ก่อนที่ฉันจะเขียนกรณีทดสอบสร้างโครงการขึ้นมาหนึ่งครั้งจากนั้นวิธีการก็สามารถเข้าถึงได้ ดังนั้นลองทำและแจ้งให้เราทราบหากมันแก้ไขปัญหาใด ๆ


0

ฉันมีปัญหาเดียวกันและวิธีแก้ปัญหาสำหรับฉันคือ:

  1. เลือกรูปแบบของฉัน
  2. แก้ไขแบบแผน ...
  3. จากนั้นเมื่อเปิดหน้าต่างการกำหนดค่าโครงการเลือกแท็บด้านซ้ายชื่อ "ทดสอบ" เพื่อเปลี่ยนเส้นทางที่นี่: ป้อนคำอธิบายรูปภาพที่นี่
  4. เช่นที่คุณเห็นว่า UITests ของฉันไม่ได้เพิ่มที่นี่ แต่มีอยู่ในโครงการของฉันดังนั้นฉันจึงต้องแตะปุ่มบวกและเลือกเป้าหมาย UITests ของฉันเช่นนี้: ป้อนคำอธิบายรูปภาพที่นี่
  5. จากนั้นแตะปุ่ม "เพิ่ม" และปิดมุมมองการกำหนดค่า
  6. ปิดท้ายด้วยโปรเจ็กต์ที่สะอาดและลองใหม่อีกครั้ง
  7. และอย่าลืมยืนยันด้วยเช่นกัน: https://developer.apple.com/library/archive/qa/qa1954/_index.html

หวังว่าคำตอบนี้จะช่วยได้

PS: สุดท้ายคิดในเป้าหมายการทดสอบของฉันในการตั้งค่าการสร้างฉันต้องตรวจสอบคุณสมบัติเหล่านี้ที่ไม่ได้กำหนดค่าอย่างถูกต้อง:

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

0

เช่นเดียวกับ @Alfishe ที่กล่าวถึงข้างต้น:

คุณต้องลบไฟล์ทดสอบออกจากCompiler Sourcesใต้Build Phases

ดังแสดงด้านล่าง


ป้อนคำอธิบายรูปภาพที่นี่


1
หากคุณทำแบบนั้นคุณจะไม่สามารถทำการทดสอบได้เท่าที่ฉันรู้
Juan Curti


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.