หากคุณหมายถึงความเป็นส่วนตัวในแบบที่ฉันคิดว่าคุณหมายถึงมันก็ไม่ใช่ - คุณไม่ควรทำการทดสอบแบบหน่วย คุณควรจะทดสอบพฤติกรรม / สถานะที่สังเกตได้เท่านั้น คุณอาจพลาดจุดที่อยู่เบื้องหลังวัฏจักร "สีแดงเขียว - refactor" ของ TDD (และหากคุณไม่ได้ทำการทดสอบก่อนจากนั้นใช้หลักการเดียวกันนี้) เมื่อการทดสอบถูกเขียนและผ่านคุณไม่ต้องการให้พวกเขามีการเปลี่ยนแปลงในขณะที่ดำเนินการ refactoring หากคุณถูกบังคับให้ต้องทดสอบการใช้งานฟังก์ชั่นส่วนตัวก็อาจหมายความว่าการทดสอบเครื่องรอบ ๆ ฟังก์ชั่นสาธารณะนั้นมีข้อบกพร่อง ถ้ามันยากและซับซ้อนในการเขียนการทดสอบรอบ ๆ รหัสสาธารณะบางทีชั้นเรียนของคุณทำมากเกินไปหรือปัญหาของคุณไม่ชัดเจน
เมื่อเวลาผ่านไปการทดสอบหน่วยของคุณจะกลายเป็นลูกบอลและโซ่ทำให้คุณช้าลงโดยไม่เพิ่มมูลค่าใด ๆ (การเปลี่ยนแปลงการใช้งานเช่นการเพิ่มประสิทธิภาพหรือการลบการทำซ้ำไม่ควรมีผลต่อการทดสอบหน่วย) อย่างไรก็ตามรหัสภายในควรถูกทดสอบโดยหน่วยเนื่องจากพฤติกรรม / สถานะสามารถสังเกตได้ (ในลักษณะที่ จำกัด )
เมื่อฉันทำการทดสอบหน่วยครั้งแรกฉันดึงลูกเล่นทุกประเภทเพื่อทดสอบหน่วยส่วนตัว แต่ตอนนี้ภายใต้เข็มขัดของฉันไม่กี่ปีฉันเห็นว่าแย่กว่าเสียเวลา
ต่อไปนี้เป็นตัวอย่างที่ไร้สาระแน่นอนในชีวิตจริงคุณจะต้องทำการทดสอบมากกว่านี้:
สมมติว่าคุณมีคลาสที่ส่งคืนรายการที่เรียงลำดับของสตริง - คุณควรตรวจสอบว่าผลลัพธ์ถูกเรียงลำดับไม่ใช่วิธีที่เรียงลำดับรายการนั้นจริง ๆ คุณสามารถเริ่มต้นการนำไปใช้งานของคุณด้วยอัลกอริทึมเดียวที่เพียงเรียงลำดับรายการ เมื่อเสร็จสิ้นการทดสอบของคุณไม่จำเป็นต้องเปลี่ยนถ้าคุณเปลี่ยนอัลกอริทึมการเรียงลำดับของคุณ ณ จุดนี้คุณมีการทดสอบเดียว (สมมติว่าการเรียงลำดับถูกฝังอยู่ในคลาสของคุณ):
- ผลลัพธ์ของฉันถูกจัดเรียงหรือไม่
ทีนี้พูดว่าคุณต้องการอัลกอริธึมสองอัน (บางทีอาจจะมีประสิทธิภาพมากกว่าในบางสถานการณ์ แต่ไม่ใช่อัลกอริธึมอื่น ๆ ) จากนั้นแต่ละอัลกอริทึมสามารถทำได้ (และโดยทั่วไปควร) โดยชั้นเรียนอื่น สถานการณ์ที่คุณเลือกโดยใช้ mocks แต่การทดสอบดั้งเดิมของคุณยังคงใช้ได้และเนื่องจากเรากำลังตรวจสอบพฤติกรรม / สถานะที่สังเกตได้เท่านั้นจึงไม่จำเป็นต้องเปลี่ยน คุณจบด้วยการทดสอบ 3 ครั้ง:
- ผลลัพธ์ของฉันถูกจัดเรียงหรือไม่
- รับสถานการณ์ (สมมติว่ารายการเริ่มต้นเกือบจะเรียงลำดับเริ่มต้นด้วย) เป็นการเรียกไปยังคลาสที่เรียงลำดับสตริงโดยใช้อัลกอริทึม X
- รับสถานการณ์ (รายการเริ่มต้นอยู่ในลำดับสุ่ม) เป็นการเรียกไปยังคลาสที่เรียงลำดับสตริงโดยใช้อัลกอริทึม Y?
ทางเลือกอื่นคือการเริ่มทดสอบรหัสส่วนตัวในชั้นเรียนของคุณ - คุณไม่ได้อะไรเลยจากนี้ - การทดสอบข้างต้นบอกทุกอย่างที่ฉันต้องรู้เท่าที่ทดสอบหน่วยเกี่ยวข้อง โดยการเพิ่มการทดสอบส่วนตัวคุณกำลังสร้างแจ็คเก็ตแบบตรงตัวเองจะทำงานได้อีกมากแค่ไหนหากคุณไม่เพียง แต่ตรวจสอบว่าผลลัพธ์ถูกเรียงลำดับแล้ว แต่ยังเรียงลำดับอย่างไร
การทดสอบ (ประเภทนี้) ควรเปลี่ยนเฉพาะเมื่อมีการเปลี่ยนแปลงพฤติกรรมเริ่มเขียนการทดสอบกับรหัสส่วนตัวและออกไปนอกหน้าต่าง