ก่อนที่จะตอบคำถามดังกล่าวคุณต้องตัดสินใจว่าสิ่งใดที่คุณต้องการบรรลุ
คุณเขียนรหัส คุณหวังว่ามันจะทำตามสัญญาของมัน (กล่าวอีกอย่างหนึ่งก็คือทำในสิ่งที่ควรทำเขียนสิ่งที่ควรทำคือก้าวไปข้างหน้าสำหรับบางคน)
เพื่อให้แน่ใจว่ามีเหตุผลว่ารหัสทำในสิ่งที่ควรทำคุณจ้องมองมันนานพอหรือคุณเขียนรหัสทดสอบที่ทดสอบกรณีเพียงพอที่จะโน้มน้าวใจคุณ "ถ้ารหัสผ่านการทดสอบทั้งหมดเหล่านี้จะถูกต้อง"
บ่อยครั้งที่คุณสนใจเฉพาะอินเทอร์เฟซที่กำหนดแบบสาธารณะของบางรหัส หากฉันใช้ห้องสมุดของคุณฉันไม่สนใจวิธีการที่คุณทำให้มันทำงานอย่างถูกต้อง แต่เพียงว่ามันไม่ทำงานอย่างถูกต้อง ฉันตรวจสอบว่าห้องสมุดของคุณถูกต้องโดยทำการทดสอบหน่วย
แต่คุณกำลังสร้างห้องสมุด การทำให้การทำงานอย่างถูกต้องเป็นเรื่องยากที่จะบรรลุ สมมติว่าฉันสนใจเฉพาะไลบรารีที่ทำการดำเนินการ X อย่างถูกต้องเท่านั้นดังนั้นฉันจึงมีการทดสอบหน่วยสำหรับ X. คุณผู้พัฒนาที่รับผิดชอบในการสร้างห้องสมุดใช้ X โดยการรวมขั้นตอน A, B และ C ซึ่งเป็นเรื่องที่ไม่สำคัญเลย ในการทำให้ไลบรารีทำงานคุณต้องเพิ่มการทดสอบเพื่อตรวจสอบว่า A, B และ C ทำงานอย่างถูกต้องหรือไม่ คุณต้องการการทดสอบเหล่านี้ การพูดว่า "คุณไม่ควรมีการทดสอบหน่วยสำหรับวิธีส่วนตัว" นั้นไม่มีประโยชน์ คุณต้องการทดสอบวิธีการส่วนตัวเหล่านี้ อาจมีบางคนบอกคุณว่าการทดสอบหน่วยวิธีส่วนตัวนั้นผิด แต่นั่นหมายความว่าคุณไม่อาจเรียกพวกเขาว่า "การทดสอบหน่วย" แต่ "การทดสอบส่วนตัว" หรือสิ่งที่คุณต้องการเรียกพวกเขา
ภาษาสวิฟต์ช่วยแก้ปัญหาที่คุณไม่ต้องการเปิดเผย A, B, C เป็นวิธีการสาธารณะเพียงเพราะคุณต้องการทดสอบด้วยการให้ฟังก์ชั่นแอตทริบิวต์ "ทดสอบได้" คอมไพเลอร์อนุญาตให้เรียกวิธีการทดสอบส่วนตัวได้จากการทดสอบหน่วย แต่ไม่ใช่จากรหัสที่ไม่ใช่การทดสอบ