โมฆะประเภทผลตอบแทน / รูทีนย่อยเป็นข่าวเก่า ฉันไม่ได้ทำ Void return type (ยกเว้นว่าฉันขี้เกียจมาก) ใน 8 ปี (ตั้งแต่เวลาที่ตอบคำถามนี้ดังนั้นก่อนที่จะถามคำถามนี้สักหน่อย)
แทนที่จะเป็นวิธีการเช่น:
public void SendEmailToCustomer()
สร้างวิธีการที่เป็นไปตามกระบวนทัศน์ int.TryParse () ของ Microsoft:
public bool TrySendEmailToCustomer()
อาจไม่มีข้อมูลใด ๆ ที่วิธีการของคุณต้องการส่งคืนสำหรับการใช้งานในระยะยาว แต่กลับสถานะของวิธีการหลังจากที่มันทำงานได้มีการใช้งานอย่างมากสำหรับผู้โทร
นอกจากนี้บูลไม่ใช่ประเภทรัฐเท่านั้น มีหลายครั้งที่รูทีนย่อยที่ทำไว้ก่อนหน้านี้สามารถส่งคืนสถานะที่แตกต่างกันสามสถานะขึ้นไป (ดี, ปกติ, ไม่ดี ฯลฯ ) ในกรณีเหล่านั้นคุณจะใช้
public StateEnum TrySendEmailToCustomer()
อย่างไรก็ตามในขณะที่ Try-Paradigm ค่อนข้างตอบคำถามนี้เกี่ยวกับวิธีการทดสอบการคืนโมฆะ แต่ก็มีข้อควรพิจารณาอื่น ๆ เช่นกัน ตัวอย่างเช่นระหว่าง / หลังจากรอบ "TDD" คุณจะเป็น "การเปลี่ยนโครงสร้าง" และสังเกตว่าคุณกำลังทำสองสิ่งด้วยวิธีการของคุณ ... ดังนั้นจึงเป็นการทำลาย "หลักการความรับผิดชอบเดี่ยว" ดังนั้นควรดูแลก่อน ประการที่สองคุณอาจใช้การอ้างอิงแบบไม่เปิดเผยตัวตน ... คุณกำลังแตะข้อมูล "ถาวร"
หากคุณกำลังทำ data access stuff ใน method-in-question คุณต้อง refactor ในสถาปัตยกรรม n-tier'd หรือ n-layer'd แต่เราสามารถสันนิษฐานได้ว่าเมื่อคุณพูดว่า "สตริงนั้นถูกแทรกลงในฐานข้อมูล" คุณหมายถึงว่าคุณกำลังเรียกเลเยอร์ตรรกะทางธุรกิจหรือบางอย่าง ใช่เราจะสมมติว่า
เมื่อวัตถุของคุณเป็นอินสแตนซ์ตอนนี้คุณเข้าใจว่าวัตถุของคุณมีการอ้างอิง นี่คือเมื่อคุณจำเป็นต้องตัดสินใจว่าคุณจะทำการพึ่งพาการฉีดบนวัตถุหรือวิธีการ นั่นหมายถึง Constructor ของคุณหรือ method-in-question ต้องการพารามิเตอร์ใหม่:
public <Constructor/MethodName> (IBusinessDataEtc otherLayerOrTierObject, string[] stuffToInsert)
ตอนนี้คุณสามารถยอมรับอินเทอร์เฟซของวัตถุชั้นธุรกิจ / ข้อมูลของคุณคุณสามารถเยาะเย้ยมันในระหว่างการทดสอบหน่วยและไม่มีการพึ่งพาหรือกลัวการทดสอบบูรณาการ "อุบัติเหตุ"
ดังนั้นในรหัสสดของคุณคุณจะผ่านIBusinessDataEtc
วัตถุจริง แต่ในการทดสอบหน่วยของคุณคุณผ่านIBusinessDataEtc
วัตถุจำลอง ใน Mock นั้นคุณสามารถรวมคุณสมบัติที่ไม่ใช่อินเทอร์เฟซเช่นint XMethodWasCalledCount
หรือบางสิ่งที่มีสถานะถูกอัพเดตเมื่อมีการเรียกเมธอดอินเตอร์เฟส
ดังนั้นการทดสอบหน่วยของคุณจะดำเนินการตามวิธีการของคุณในคำถามดำเนินการตามตรรกะที่พวกเขามีและเรียกหนึ่งหรือสองหรือชุดของวิธีการที่เลือกในIBusinessDataEtc
วัตถุของคุณ เมื่อคุณทำการยืนยันในตอนท้ายของการทดสอบหน่วยของคุณคุณมีสองสามสิ่งที่จะทดสอบตอนนี้
- สถานะของ "รูทีนย่อย" ซึ่งขณะนี้เป็นวิธีลองกระบวนทัศน์
- สถานะของ
IBusinessDataEtc
วัตถุจำลองของคุณ
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับแนวคิดการพึ่งพาการฉีดในระดับการก่อสร้าง ... เนื่องจากเกี่ยวข้องกับการทดสอบหน่วย ... ดูที่รูปแบบการออกแบบตัวสร้าง เพิ่มอินเทอร์เฟซและคลาสเพิ่มเติมอีกหนึ่งรายการสำหรับแต่ละอินเทอร์เฟซ / คลาสปัจจุบันที่คุณมี แต่มีขนาดเล็กมากและเพิ่มฟังก์ชันการทำงานจำนวนมากเพื่อการทดสอบหน่วยที่ดีขึ้น