คุณควรทำแบบเดียวกันหากไม่ได้รับการทดสอบหน่วยที่ดีกว่ารหัสการผลิตในแง่ของคุณภาพและความสามารถในการอ่าน การทดสอบหน่วยมักเป็นสิ่งแรกที่คุณมองเมื่อพยายามที่จะเข้าใจว่าโค้ดบางส่วนทำอะไรและผู้อ่านควรเข้าใจสิ่งที่มีส่วนได้ส่วนเสียอย่างรวดเร็วเมื่อดูการทดสอบ การทดสอบหน่วยยังมีแนวโน้มที่จะเปลี่ยนไปมากและจะทำลายได้มากหากการออกแบบของพวกเขาไม่แข็งแรงซึ่งชนิดของการทดสอบที่ไร้ประโยชน์
การละเมิดกฎหมาย Demeter นั้นเป็นปัญหาอย่างหนึ่งในการทดสอบหน่วยของคุณด้วยเหตุผลนั้นเช่นเดียวกับคนอื่น ๆ อีก 2 คนที่หลุดจากใจฉัน:
หากการทดสอบของคุณผิดกฎหมายของ Demeter ในส่วนArrange หรือ Actของพวกเขาอาจเป็นสัญญาณว่ารหัสการผลิตของคุณก็ทำเช่นกันเนื่องจากการทดสอบหน่วยของคุณเป็นเพียงผู้บริโภครหัสของคุณอีกคนหนึ่งและอาจจะเรียกและดำเนินการชั้นเรียนภายใต้การทดสอบเดียวกัน วิธีการที่รหัสการผลิตอื่น ๆ จะทำ
หากการทดสอบของคุณผิดกฎของ Demeter ในส่วน Assert ของพวกเขา (เช่นคุณตรวจสอบค่าของบางสิ่งที่ซ้อนกันอย่างลึกลงไปในกราฟการพึ่งพาของวัตถุที่อยู่ภายใต้การทดสอบ) อาจเป็นได้ว่าเป็นการทดสอบบูรณาการมากกว่าการทดสอบหน่วย กล่าวอีกนัยหนึ่งถ้าใน TestA คุณยืนยันว่า ABCD เท่ากับอะไรบางอย่างมันอาจเป็นไปได้ว่าคุณกำลังพยายามทดสอบD และ Aมากกว่าแค่ A
โดยวิธีการเมื่อคุณพูด
ฉันทำผิดกฎของ Demeter บ่อยมากเพื่อการเขียนที่เร็วขึ้นและไม่ได้ใช้ตัวแปรมากมาย
คุณควรทราบว่าการเขียน
var grab = myDependency.Grab;
var something = grab.Something;
var very = something.Very;
very.Deep();
ที่จริงแล้ว Demeter ไม่ฉลาดไปกว่านี้อีกแล้ว
myDependency.Grab.Something.Very.Deep();
ถ้านั่นคือสิ่งที่คุณหมายถึง