ฉันกำลังอ่านว่าคุณมีความเห็นว่าการทดสอบหน่วยเช่นเดียวกับวัตถุ SOLID ต้องมี "เหตุผลเดียวที่จะทำให้แตก" เป็นเป้าหมายที่สูงส่ง แต่ฉันคิดว่าคุณจะพบว่าในหลาย ๆ กรณีมันเป็นไปไม่ได้ หนึ่งในกรณีเหล่านี้คือที่นี่ซึ่งคุณมีวัตถุโดเมน "รวย" (DDD สร้างความแตกต่างระหว่างเอนทิตีและค่าวัตถุซึ่งทั้งสองประกอบด้วย "โดเมนโมเดล") ซึ่งเป็นการพึ่งพาของระบบภายใต้การทดสอบ
ในสถานการณ์เหล่านี้ฉันมีปรัชญาที่ให้ไว้วัตถุโดเมนมีการทดสอบครอบคลุมหน่วยของตัวเองโดยเชื่อว่าวัตถุจะทำงานตามที่ออกแบบในการทดสอบหน่วยสำหรับ SUT ที่แตกต่างกันไม่จำเป็นต้องละเมิดการทดสอบหน่วย หากการทดสอบนี้หยุดลงเนื่องจากการเปลี่ยนแปลงที่เกิดกับโดเมนนั้นฉันคาดว่าการทดสอบหน่วยของวัตถุโดเมนจะแตกเช่นกันนำฉันไปสู่บางสิ่งที่ต้องการตรวจสอบ หากการทดสอบหน่วยของวัตถุโดเมนได้รับการอัปเดตอย่างเหมาะสมเป็นการทดสอบสีแดงแสดงว่าเป็นสีเขียวเมื่อมีการเปลี่ยนแปลงและจากนั้นการทดสอบอื่นล้มเหลวนั่นก็ไม่ได้เป็นเรื่องเลวร้ายเช่นกัน หมายความว่าความคาดหวังของการทดสอบอื่น ๆ นี้ขัดแย้งกับความคาดหวังใหม่สำหรับโดเมนและฉันต้องการให้แน่ใจว่าพวกเขาทั้งสองเห็นด้วยกันและเกณฑ์การยอมรับที่ครอบคลุมของระบบ
ดังนั้นฉันจะจำลองวัตถุโดเมนเท่านั้นหากกล่าวว่าวัตถุโดเมนสร้าง "ผลข้างเคียง" ที่ไม่พึงประสงค์จากมุมมองการทดสอบหน่วย (เช่นการสัมผัสทรัพยากรภายนอกเช่นแหล่งข้อมูล) หรือหากตรรกะของวัตถุโดเมนนั้นซับซ้อนเพียงพอ วางไว้ในสถานะที่เหมาะสมสำหรับการทดสอบกลายเป็นสิ่งกีดขวางบนถนนเพื่อกำหนดและผ่านการทดสอบ
จากนั้นกลายเป็นคำถามการขับขี่ ไหนง่ายกว่ากัน หากต้องการใช้วัตถุโดเมนเพื่อจุดประสงค์ในการทดสอบหรือเพื่อจำลอง ทำสิ่งที่ง่ายกว่าจนกว่าจะไม่มีตัวเลือกง่ายขึ้นอีกต่อไปเช่นเมื่อการเปลี่ยนแปลงการทำงานหยุดการทดสอบบริการในลักษณะที่ซับซ้อน หากสิ่งนี้เกิดขึ้นให้เขียนการทดสอบใหม่เพื่อสร้างจำลองที่แสดงถึงข้อกำหนดในการใช้งานซึ่งขึ้นอยู่กับบริการโดยไม่มีความซับซ้อนที่จะทำลายมัน
เข้าใจว่าไม่ว่าด้วยวิธีใดควรมีการทดสอบการรวมที่ใช้วัตถุโดเมนจริงที่เสียบเข้ากับบริการจริงที่ทดสอบการทำงานร่วมกันระหว่างสองสิ่งนี้ในระดับที่สูงขึ้นของสิ่งที่เป็นนามธรรม (เช่นการทดสอบเป็นต้นว่าไม่เพียง ปลายทาง แต่เป็นพร็อกซีซึ่งวัตถุโดเมนนั้นเป็นอนุกรมและส่ง)