ในการทดสอบหน่วยของฉันฉันมักจะโยนค่าโดยพลการที่รหัสของฉันเพื่อดูว่ามันทำอะไร ตัวอย่างเช่นถ้าฉันรู้ว่าfoo(1, 2, 3)
ควรจะคืน 17 ฉันอาจเขียนนี้:
assertEqual(foo(1, 2, 3), 17)
ตัวเลขเหล่านี้เป็นกฎเกณฑ์โดยธรรมชาติและไม่มีความหมายที่กว้างกว่า (ตัวอย่างเช่นมันไม่ใช่เงื่อนไขขอบเขตแม้ว่าฉันจะทำการทดสอบกับสิ่งเหล่านั้นเช่นกัน) ฉันจะพยายามหาชื่อที่ดีสำหรับตัวเลขเหล่านี้และการเขียนอะไรทำนองconst int TWO = 2;
นั้นก็ไม่ได้ช่วยอะไรเลย มันโอเคที่จะเขียนแบบทดสอบนี้หรือฉันควรแยกตัวเลขออกเป็นค่าคงที่หรือไม่?
ในทุกหมายเลขมายากลถูกสร้างขึ้นเหมือนกันหรือไม่ เราได้เรียนรู้ว่าตัวเลขเวทมนตร์นั้นใช้ได้ถ้าความหมายนั้นชัดเจนจากบริบท แต่ในกรณีนี้ตัวเลขนั้นไม่มีความหมายเลย
const int TWO = 2;
2
แม้จะเลวร้ายยิ่งกว่าเพียงแค่ใช้ มันสอดคล้องกับถ้อยคำของกฎโดยมีเจตนาที่จะละเมิดจิตวิญญาณของมัน
foo
มันจะไม่หมายถึงอะไรเลยและพารามิเตอร์ แต่ในความเป็นจริงผมค่อนข้างแน่ใจว่าฟังก์ชั่นไม่ได้มีชื่อและพารามิเตอร์ที่ไม่ได้มีชื่อbar1
, และbar2
bar3
ทำให้เป็นจริงมากขึ้นตัวอย่างที่ชื่อมี ความหมายจากนั้นมันก็สมเหตุสมผลมากกว่าที่จะอภิปรายว่าค่าข้อมูลการทดสอบนั้นต้องการชื่อด้วยเช่นกัน
1, 2, 3
เป็นดัชนีอาร์เรย์ 3 มิติที่คุณเก็บค่าไว้ก่อนหน้านี้17
ฉันคิดว่าการทดสอบนี้จะดูดี (ตราบใดที่คุณมีการทดสอบเชิงลบด้วย) แต่ถ้าเป็นผลจากการคำนวณคุณควรตรวจสอบให้แน่ใจว่าทุกคนที่อ่านการทดสอบนี้จะเข้าใจว่าทำไมfoo(1, 2, 3)
ต้องเป็น17
เช่นนั้นและตัวเลขเวทมนต์อาจไม่บรรลุเป้าหมาย