วิธีที่ดีที่สุดในการทดสอบโค้ด Objective-C คืออะไร


330

เฟรมเวิร์กใดที่มีอยู่สำหรับการทดสอบหน่วยรหัส Objective-C ฉันต้องการเฟรมเวิร์กที่รวมเข้ากับ Apple Xcode ได้ดี


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

คำตอบ:


317

Xcode รวมถึง XCTest ซึ่งคล้ายกับOCUnitซึ่งเป็นกรอบการทดสอบหน่วย Objective-C และมีการสนับสนุนอย่างเต็มที่สำหรับการรันการทดสอบหน่วยที่ใช้ XCTest ซึ่งเป็นส่วนหนึ่งของกระบวนการสร้างโครงการของคุณ การสนับสนุนการทดสอบหน่วย Xcode ถูกอธิบายไว้ในภาพรวม Xcode: การใช้หน่วยทดสอบ

ย้อนกลับไปใน Xcode 2 วันฉันเขียนชุดของโพสต์เว็บบล็อกเกี่ยวกับวิธีการทำงานทั่วไปบางอย่างด้วยการทดสอบหน่วย Xcode:

แม้จะใช้ OCUnit มากกว่า XCTest แต่แนวคิดก็เหมือนกันมาก

ในที่สุดฉันก็เขียนบทความสองสามข้อเกี่ยวกับวิธีเขียนการทดสอบสำหรับส่วนต่อประสานผู้ใช้ของ Cocoa โครงสร้างของโกโก้ทำให้ค่อนข้างตรงไปตรงมาเพราะคุณไม่จำเป็นต้องหมุนวนเหตุการณ์หรืออะไรทำนองนั้นในกรณีส่วนใหญ่

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


5
Peter Hosey ยังได้นำเสนอที่ดีเกี่ยวกับการทดสอบหน่วย Cocoa ที่การประชุม Lake Forest, CA Cocoaheads ในเดือนธันวาคม นี่คือวิดีโอของมัน: vimeo.com/2725498
Grant Limberg

1
เมื่อฉันเริ่ม iOS สิ่งประมาณหนึ่งปีที่ผ่านมาฉันพบว่า OCUnit มีข้อบกพร่องร้ายแรง (สำหรับฉัน) - ฉันไม่สามารถเรียกใช้บนอุปกรณ์จำลองหรืออุปกรณ์ได้ อาจมีการเปลี่ยนแปลงตั้งแต่นั้นมา - ฉันยังไม่ได้ตรวจสอบ แต่ฉันใช้ GHUnit เพียงเพราะเหตุผลนั้น
drekka

1
มีวิดีโอนักพัฒนา Apple อย่างเป็นทางการในหัวข้อนี้หรือไม่? ฉันผ่าน WWDC 2011 และ 2010 แต่ไม่พบ ... แปลกประหลาดเนื่องจากการทดสอบมีความสำคัญใช่ไหม
Robert

4
ลิงก์คู่มือการทดสอบหน่วย Xcode ได้ย้ายไปที่คู่มือการทดสอบหน่วย Xcode
Steven Green

5
Xcode 5 ตอนนี้มี XCTest แล้วยังมี OCUnit อยู่หรือไม่ คุณจะอัปเดตคำตอบด้วยข้อมูลสำหรับ XCode 5 หรือไม่
BrightIntelDusk

50

ตรวจสอบGHUnitโดย Gabriel Handford:

"เป้าหมายของ GHUnit คือ:

รันการทดสอบหน่วยภายใน XCode ช่วยให้คุณสามารถใช้ประโยชน์อย่างเต็มที่จากดีบักเกอร์ XCode GUI ที่ง่ายในการช่วยให้คุณเห็นภาพการทดสอบของคุณ แสดงร่องรอยสแต็ก สามารถติดตั้งเป็นกรอบ (สำหรับแอป Cocoa) ด้วยการตั้งค่าเป้าหมายอย่างง่าย (หรือไม่); หรือง่ายต่อการบรรจุลงในโครงการ iPhone ของคุณ "


5
+1 สำหรับ GHUnit! ฉันยังใหม่กับการพัฒนา iPhone และฉันสามารถพูดได้อย่างตรงไปตรงมาว่าฉันมี GHUnit และทำงานโดยไม่ต้องยุ่งยาก (คำสั่งสมบูรณ์แบบ) เมื่อเปรียบเทียบกับฝันร้ายที่แท้จริงของ OCUnit และไมเกรนอ่อนโยนของ GTM GHUnit ชนะการใช้งานและความสะดวก!
Tim Reddy

3
โปรดทราบว่าคำตอบนี้และความคิดเห็นเพิ่มเติมถูกเขียนขึ้นเมื่อไม่นานมานี้ Xcode มีการสนับสนุนที่ดีขึ้นมากสำหรับการทดสอบที่ใช้ OCUnit ทำให้ง่ายต่อการตั้งค่าการทดสอบและเรียกใช้การทดสอบในโปรแกรมดีบั๊ก
Kristopher Johnson

1
โครงการนี้เลิกใช้แล้ว
BigHeadCreations



12

โปรดทราบว่าโครงการ Google Toolbox for Mac (GTM) เพียงแค่ขยาย / เพิ่มกรอบ SenTestingKit ของ Apple (ซึ่งก็คือตัวเองขึ้นอยู่กับ OCUnit) อย่างที่พวกเขาพูดในเว็บไซต์โครงการ:

GTM มีการปรับปรุงหลายอย่างกับ SenTestingKit มาตรฐานซึ่งช่วยให้คุณทำการทดสอบหน่วย UI การทดสอบหน่วยผูกพันอัตโนมัติการติดตามบันทึกและการทดสอบหน่วยบน iPhone รวมถึงเครื่องมือสำหรับการทดสอบโค้ดแบบคงที่และไดนามิก

หมายเหตุความคิดเห็นต่อไปนี้เกี่ยวกับการทดสอบส่วนต่อประสานผู้ใช้:

GTM มีการสนับสนุนอย่างกว้างขวางสำหรับการทดสอบส่วนต่อประสานกับผู้ใช้ รองรับการทดสอบทั้งการถ่ายภาพและ / หรือสถานะภายในของวัตถุ Cocoa / UIKit UI มาตรฐานเกือบทั้งหมดและทำให้คุณสามารถขยายการสนับสนุนนี้ไปยังวัตถุ UI ของคุณเองได้อย่างง่ายดาย

ดูหน้า "การยืนยันรหัสและการทดสอบหน่วย " ของพวกเขาสำหรับคำแนะนำเกี่ยวกับวิธีการใช้งาน


12

ฉันได้ข้อสรุปว่า GHUnit เป็นกรอบการทดสอบขั้นสูงสุดสำหรับ Objective-C ฉันได้ทำบทสรุปของการทดสอบกรอบบนบล็อกของฉัน มันมีความยืดหยุ่นมากที่สุดในแง่ของการปรับใช้ (iphone, จำลองหรือ mac os ดั้งเดิม) และความสามารถในการยืนยัน เนื่องจากมันใช้ GTM จึงได้รับข้อดีทั้งหมดของ GTM เหนือ SenTestingKit แต่ยังเพิ่มมากขึ้นอีกมาก โบนัสอีกอย่างก็คือมันถูกเก็บรักษาไว้อย่างแข็งขัน

ฉันได้พยายามรวมOCMockเข้ากับ GHUnit แล้วมันใช้งานได้ดีมาก! คุณจะได้รับรหัสบนGitHub


12

ฉันรู้ว่านี่เป็นคำถามเก่า แต่ถ้าคุณชอบการทดสอบแบบ BDD (rspec, Jasmine ฯลฯ ) มากกว่าการทดสอบแบบ xUnit (ทดสอบ :: หน่วย, JSUnit, JUnit ฯลฯ ) คุณอาจพิจารณาตรวจสอบCedar . Cedar นำการทดสอบในรูปแบบ BDD มาสู่ Objective-C ซึ่งขณะนี้ภาษารองรับการปิด

เราใช้ Cedar อย่างมีความสุขสำหรับโครงการ iOS ของเราที่Pivotal Labsและเรากำลังดำเนินการปรับปรุงอย่างจริงจัง ความคิดเห็นหรือข้อเสนอแนะใด ๆ ยินดีต้อนรับที่ cedar-discuss@googlegroups.com


10

ฉันขอแนะนำให้ใช้เครื่องมือครอบคลุมเพื่อดูว่าส่วนใดของรหัสที่ครอบคลุมด้วยการทดสอบหน่วยและไม่ได้ สามารถสร้างบรรทัดพื้นฐานและรหัสสาขาครอบคลุมได้ด้วยเครื่องมือGCOV หากคุณต้องการสร้างรายงานความครอบคลุม HTML ที่ดีมีLCOVและZCOVที่ทำเช่นนั้น







5

ฉันขอแนะนำให้ดูเป็น Kiwi ซึ่งเป็นกรอบการทดสอบโอเพนซอร์ส BDD สำหรับ iOS: Kiwi

ตรวจสอบ WIKI ของโครงการเพื่อเริ่มต้นหรือรับหนังสือของ Daniel Steinberg "Test Driving iOS Development ด้วย Kiwi" test-driving-ios-development


นอกจากนี้ Kiwi ยังรองรับ OS X โปรดดูgithub.com/allending/Kiwi/wiki/Up-and-Running-with-Kiwi-for-Mac
dbainbridge

4

ฉันใช้ SimpleUnitTest ใช้งานได้กับ iPhone และ iPad libs

http://cbess.blogspot.com/2010/05/simple-iphone-ipad-unit-test.html

มันมาพร้อมกับเทมเพลต Xcode สำหรับทดสอบหน่วยเพื่อเพิ่มคลาสการทดสอบหน่วยได้อย่างง่ายดาย ห่อ GTM

คุณสามารถวางลงในโครงการที่ใช้งานอยู่และเริ่มเพิ่มการทดสอบหน่วยภายใน 3 นาที (หรือน้อยกว่า)


เอ่อ .. มันน่าจะล้มเหลวทันทีที่คุณรันเหรอ?
quantumpotato


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