ฉันมีวิชาเรียนมากมายที่จัดการกับการตรวจสอบความถูกต้องของค่า ตัวอย่างเช่นRangeValidator
คลาสจะตรวจสอบว่าค่าอยู่ในช่วงที่ระบุหรือไม่
คลาสตัวตรวจสอบความถูกต้องมีสองวิธี: is_valid(value)
ซึ่งส่งคืนTrue
หรือFalse
ขึ้นอยู่กับค่าและensure_valid(value)
ตรวจสอบค่าที่ระบุและไม่ทำอะไรเลยถ้าค่านั้นถูกต้องหรือส่งข้อยกเว้นเฉพาะถ้าค่าไม่ตรงกับกฎที่กำหนดไว้ล่วงหน้า
ขณะนี้มีการทดสอบสองหน่วยที่เกี่ยวข้องกับวิธีนี้:
สิ่งที่ผ่านค่าที่ไม่ถูกต้องและทำให้แน่ใจว่ามีข้อผิดพลาดเกิดขึ้น
def test_outside_range(self): with self.assertRaises(demo.ValidationException): demo.RangeValidator(0, 100).ensure_valid(-5)
สิ่งที่ผ่านค่าที่ถูกต้อง
def test_in_range(self): demo.RangeValidator(0, 100).ensure_valid(25)
แม้ว่าการทดสอบครั้งที่สองจะทำงาน - ล้มเหลวหากมีการโยนข้อยกเว้นและประสบความสำเร็จหากensure_valid
ไม่ได้โยนอะไรเลย - ความจริงที่ว่าไม่มีสิ่งใดassert
อยู่ข้างในดูแปลก คนที่อ่านรหัสดังกล่าวจะถามตัวเองทันทีว่าทำไมมีการทดสอบซึ่งดูเหมือนว่าไม่ได้ทำอะไรเลย
นี่เป็นแนวปฏิบัติในปัจจุบันเมื่อทดสอบวิธีที่ไม่ส่งคืนค่าและไม่มีผลข้างเคียงหรือไม่ หรือฉันควรจะเขียนการทดสอบในวิธีที่ต่างออกไป? หรือเพียงแค่ใส่ความคิดเห็นอธิบายสิ่งที่ฉันทำ
self
อ้างอิง) และส่งกลับผลลัพธ์ไม่มันไม่ใช่ฟังก์ชั่นที่บริสุทธิ์
void
ในหลายภาษาและมีกฎโง่ ๆ ) หรือคุณอาจมีจำนวนอนันต์ วนซ้ำ (ซึ่งทำงานได้แม้เมื่อ "ส่งคืนผลลัพธ์ไม่ได้" จริงๆหมายถึงไม่ส่งคืนผลลัพธ์
unit -> unit
ในภาษาใด ๆ ที่จะพิจารณาหน่วยประเภทข้อมูลมาตรฐานแทนของบางสิ่งบางอย่างน่าอัศจรรย์พิเศษดาด น่าเสียดายที่มันแค่คืนค่ายูนิตและไม่ทำอะไรเลย