ทั้งสอง
การทดสอบแบบกำหนดค่าและแบบไม่ระบุค่ามีกรณีการใช้งานที่แตกต่างกันและค่าที่แตกต่างกับชุดของคุณ โดยทั่วไปแล้ว nondeterministic ไม่สามารถให้ความแม่นยำเช่นเดียวกับการทดสอบที่กำหนดขึ้นซึ่งค่อยๆเติบโตเป็น "การทดสอบ nondeterministic ที่ไม่มีคุณค่า" นี่เป็นเท็จ พวกมันอาจจะแม่นยำน้อยกว่า แต่ก็มีความกว้างมากกว่าซึ่งมีประโยชน์ของตัวเอง
ลองมาตัวอย่าง: คุณเขียนฟังก์ชั่นที่เรียงลำดับรายการจำนวนเต็ม การทดสอบหน่วยกำหนดค่าบางอย่างที่คุณคิดว่ามีประโยชน์จะเป็นอย่างไร
- รายการว่างเปล่า
- รายการที่มีองค์ประกอบเดียว
- รายการที่มีองค์ประกอบเดียวกันทั้งหมด
- รายการที่มีองค์ประกอบที่ไม่ซ้ำกันหลายรายการ
- รายการที่มีองค์ประกอบหลายรายการซึ่งบางรายการซ้ำกัน
- รายการที่มี
NaN
, INT_MIN
และINT_MAX
- รายการที่เรียงลำดับแล้วบางส่วน
- รายการที่มี 10,000,000 องค์ประกอบ
และนั่นเป็นเพียงฟังก์ชั่นการเรียงลำดับ! แน่นอนคุณสามารถยืนยันว่าสิ่งเหล่านี้บางอย่างไม่จำเป็นหรือบางส่วนสามารถแก้ไขได้ด้วยการใช้เหตุผลอย่างไม่เป็นทางการ แต่เราเป็นวิศวกรและเราเคยเห็นเหตุผลที่ไม่เป็นทางการเกิดขึ้นในหน้าของเรา เรารู้ว่าเราไม่ฉลาดพอที่จะเข้าใจระบบที่เราสร้างหรือรักษาความซับซ้อนในหัวของเราอย่างสมบูรณ์ นั่นเป็นเหตุผลที่เราเขียนแบบทดสอบในตอนแรก การเพิ่มการทดสอบแบบ nondeterministic เพียงแค่บอกว่าเราอาจไม่ฉลาดพอที่จะรู้ว่าการทดสอบที่ดีทั้งหมดนั้นเป็นเรื่องสำคัญ โดยการโยนข้อมูลกึ่งสุ่มลงในฟังก์ชั่นของคุณคุณมีแนวโน้มที่จะพบกรณีที่คุณพลาด
แน่นอนว่าไม่ได้ออกกฎการทดสอบที่กำหนดเช่นกัน การทดสอบ Nondeterministic ช่วยค้นหาข้อผิดพลาดในโปรแกรมขนาดใหญ่ เมื่อคุณพบข้อบกพร่องแล้วคุณต้องมีวิธีการทำซ้ำเพื่อแสดงว่าคุณได้แก้ไขแล้ว ดังนั้น:
- ใช้การทดสอบ nondeterministic เพื่อค้นหาข้อบกพร่องในรหัสของคุณ
- ใช้การทดสอบที่กำหนดขึ้นเพื่อตรวจสอบการแก้ไขในรหัสของคุณ
โปรดทราบว่านี่หมายถึงคำแนะนำที่เป็นของแข็งมากมายเกี่ยวกับการทดสอบหน่วยไม่จำเป็นต้องใช้กับการทดสอบแบบไม่ระบุชื่อ ตัวอย่างเช่นพวกเขาจะต้องรวดเร็ว การทดสอบคุณสมบัติระดับต่ำควรรวดเร็ว แต่การทดสอบแบบ nondeterministic เช่น "จำลองผู้ใช้คลิกปุ่มบนเว็บไซต์ของคุณแบบสุ่มและให้แน่ใจว่าคุณไม่ได้รับข้อผิดพลาด 500" ควรสนับสนุนความครอบคลุมมากกว่าความเร็ว เพียงแค่มีการทดสอบเช่นนั้นทำงานเป็นอิสระจากกระบวนการสร้างของคุณเพื่อที่จะไม่ชะลอการพัฒนา ตัวอย่างเช่นเรียกใช้ในกล่องการแสดงละครส่วนตัว