'โมดูลไม่ได้รับการรวบรวมสำหรับการทดสอบ' เมื่อใช้ @testable


146

ฉันกำลังพยายามใช้การ@testableประกาศใหม่ของ Swift 2 เพื่อแสดงชั้นเรียนของฉันไปยังเป้าหมายการทดสอบ อย่างไรก็ตามฉันได้รับข้อผิดพลาดของคอมไพเลอร์นี้:

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

Intervalsเป็นโมดูลที่มีชั้นเรียนที่ฉันพยายามเปิดเผย ฉันจะกำจัดข้อผิดพลาดนี้ได้อย่างไร

คำตอบ:


238

ในเป้าหมายหลักของคุณคุณต้องตั้งค่าEnable Testabilityตัวเลือกการสร้างเป็นใช่

ตามความคิดเห็นโดย @earnshavian ด้านล่างสิ่งนี้ควรใช้กับบิลด์ debug ตามแอปเปิ้ลรีลีสโน้ต: "การตั้งค่าเปิดใช้งานการสร้าง Testability ควรใช้ในการกำหนดค่า Debug ของคุณเท่านั้นเพราะมันห้ามการปรับให้เหมาะสม แอปหรือกรอบงาน " https://developer.apple.com/library/content/releasenotes/DeveloperTools/RN-Xcode/Chapters/Introduction.html#//apple_ref/doc/uid/TP40001051-CH1-SW326


สวัสดีฉันได้รับข้อผิดพลาดเดียวกัน แต่ไม่เห็นตัวเลือกการเปิดใช้งานการทดสอบและกำลังใช้ xcode 7. มีความคิดใดที่ฉันควรทำ
user1601259

2
@ user1601259 - คุณสามารถค้นหาตัวเลือกโดยเลือกโครงการระดับบนสุดไปที่การตั้งค่าการสร้างและดูภายใต้หัวข้อตัวเลือกการสร้าง
hgwhittle

@hgwhittle - เมื่อฉันเลือกโครงการระดับบนสุดสิ่งที่ฉันเห็นในตัวเลือกบิลด์คือ "รูปแบบข้อมูลการดีบัก" และ "ตรวจสอบผลิตภัณฑ์บิลด์" เมื่อฉันเลือกเป้าหมายในตัวเลือกการสร้างฉันเห็น "เนื้อหาฝังตัวมีรหัส swift" แค่นั้นแหละ. เมื่อฉันค้นหาในการตั้งค่าการสร้างฉันไม่พบมัน เป็นเพราะ xcode 7 หรือไม่
user1601259

1
เป็นไปได้ว่าคุณได้เลือก "พื้นฐาน" ใน "การตั้งค่า Build" หากคุณเลือก "ทั้งหมด" ทางด้านซ้ายคุณจะเห็น "เปิดใช้งานความสามารถในการทดสอบ"
อาร์เรย์

1
งานนี้ควรใช้กับรุ่นวางจำหน่ายอย่างแน่นอนว่าการทดสอบจะทำงานที่ใด (ต้องมี@testable) แต่ต้องส่งไปที่ App Store ถ้าEnable Testabilityเป็นเพียงแค่การดีบักบิวด์อะไรคือสิ่งที่รอบนี้ ฉันต้องดึงรหัสทดสอบออกมาเพื่อปล่อยหรือไม่
timgcarlson

15

ในกรณีของฉันฉันใช้การกำหนดค่าการสร้างที่กำหนดเองสำหรับการทดสอบ (เรียกว่าTest) และยังcocoapodsเป็นผู้จัดการการพึ่งพา

ฉันต้องเพิ่มบรรทัดต่อไปนี้ที่ส่วนท้ายของฉันPodfileเพื่อให้สามารถทดสอบได้

post_install do |installer|
    installer.pods_project.targets.each do |target|
        target.build_configurations.each do |config|
            if config.name == 'Test'
                config.build_settings['ENABLE_TESTABILITY'] = 'YES'
            end
        end
    end
end

โดยค่าเริ่มต้นcocoapodsกำหนดENABLE_TESTABILITYเป็นYESสำหรับการDebugสร้างเท่านั้น


13

ตรวจสอบให้แน่ใจว่าคุณตั้งค่าช่องทำเครื่องหมายของคุณอย่างถูกต้องภายใต้รูปแบบแอพของคุณ คุณควรปลดล็อคเป้าหมายการทดสอบของคุณสำหรับ Build Build

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


2
สำหรับข้อมูลเพิ่มเติมดูที่นี่: developer.apple.com/library/mac/technotes/tn2215/_index.html
P. Pawluś

8

สำหรับผู้ที่กำลังประสบกับปัญหานี้เฉพาะเมื่อใช้งาน Xcode Profiler: สลับการกำหนดค่าการสร้างโปรไฟล์ในการจัดการแบบแผนของคุณไปเป็นแบบที่เปิดใช้งานการทดสอบ - และนั่นจะเป็นการดีบั๊กในกรณีส่วนใหญ่:

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


4

นี่อาจจะเป็นเพราะเป้าหมายหลักของคุณถูกตั้งค่าให้Enable Testability NOคุณควรกำหนดให้YESเป็นรูปแบบการดีบัก (ซึ่งใช้สำหรับการทดสอบของคุณ)

หากคุณใช้คาร์เธจปัญหานี้อาจเกิดจากการนำเข้าเฟรมเวิร์กด้วย@testableเนื่องจากมันถูกสร้างขึ้นด้วยแบบแผนการวางจำหน่าย

ส่วนใหญ่เป็นการดีที่จะนำเข้าเฟรมเวิร์กด้วยส่วนนำหน้านั้นดังนั้นคุณจึงสามารถหลีกเลี่ยงได้ หากคุณไม่สามารถทำได้คุณควรEnable Testabilityอยู่ในรูปแบบการเปิดตัวของเฟรมเวิร์ก https://developer.apple.com/library/content/releasenotes/DeveloperTools/RN-Xcode/Chapters/Introduction.html#//apple_ref/doc/uid/TP40001051-CH1-SW326


2
ฉันจะหลีกเลี่ยงการนำเข้าเฟรมเวิร์กโดยใช้ @testable ได้อย่างไร การปฏิบัติที่ดีที่นี่คืออะไร?
Jonathan Cabrera

3

ฉันเริ่มได้รับข้อผิดพลาดนี้เมื่อทำการทดสอบโดยใช้ Bitrise

ซึ่งแตกต่างจากผู้ใช้อื่น ๆ กล่าวว่านี้ไม่ได้ต่อTargetพื้นฐานหรือต่อSchemaพื้นฐานก็คือต่อConfigurationพื้นฐาน เลือกTarget-> Build Settingsแท็บ -> มองหาtestability-> เปิดใช้งานได้ในการกำหนดค่าที่คุณกำลังใช้

โปรดสังเกตว่า Apple แนะนำให้เปิดใช้งานสิ่งนี้กับการกำหนดค่าที่คุณใช้สำหรับการดีบักไม่ใช่สำหรับ AppStore


0

วิธีแก้ปัญหาข้างต้นนั้นใช้ได้ถ้าคุณใช้พ็อด / คาร์เธจ แต่ถ้าคุณใช้เฟรมเวิร์กจาก iOS เอง 'เช่นผู้ติดต่อ' คุณต้องเพิ่มพา ธ ไปยังเฟรมเวิร์กเหล่านี้ใน 'เส้นทางการค้นหาห้องสมุด' ของเป้าหมายหลักของโครงการของคุณ ป้อนคำอธิบายรูปภาพที่นี่


0

หากคุณพยายามทดสอบเฟรมเวิร์ก:

ไปที่เป้าหมายการทดสอบ -> สร้างเฟส -> สร้างเฟสสำเนาไฟล์ใหม่ -> เลือกเฟรมเวิร์ก -> เพิ่มเฟรมเวิร์กที่ใช้ซ้ำทั้งหมด


0

หากมีโอกาสคุณมี

install! 'cocoapods',
         generate_multiple_pod_projects: true,
         incremental_installation: true

จากนั้นนี่เป็นวิธีที่จะทำ

    # generated_projects only returns results if the we run "pod install --clean-install"
    # or install a pod for the first time

    installer.generated_projects.each do |project|
        project.build_configurations.each do |configuration|
            configuration.build_settings["ENABLE_TESTABILITY"] = "YES" 
        end
    end

-3

สิ่งนี้ไม่ได้เกิดขึ้นในโครงการของฉันก่อนหน้า Xcode 8 แต่หลังจากฉันอัพเกรดเป็น Xcode 8 มันทำให้ฉันงุนงง

คำตอบที่โพสต์ที่นี่ไม่ได้รับการแก้ไขปัญหาของฉัน สำหรับฉันฉันเพิ่งทำการทดสอบเหล่านี้เนื่องจากไม่จำเป็น ดังนั้นให้ยกเลิกการเลือกปุ่มทดสอบ:

ป้อนคำอธิบายรูปภาพที่นี่ และตอนนี้ข้อผิดพลาดได้หายไป


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