ในแอปพลิเคชั่นส่วนใหญ่ของฉันฉันมีวัตถุ "config" แบบซิงเกิลหรือแบบสแตติกซึ่งรับผิดชอบการอ่านการตั้งค่าต่าง ๆ จากดิสก์ เกือบทุกคลาสใช้เพื่อจุดประสงค์ที่หลากหลาย โดยพื้นฐานแล้วมันเป็นเพียงตารางแฮชของคู่ชื่อ / ค่า มันเป็นแบบอ่านอย่างเดียวดังนั้นฉันจึงไม่ได้กังวลกับความจริงที่ว่าฉันมีสถานะทั่วโลกมากมาย แต่ตอนนี้ฉันเริ่มต้นกับการทดสอบหน่วยมันเริ่มเป็นปัญหาแล้ว
ปัญหาหนึ่งคือคุณไม่ต้องการทดสอบกับการกำหนดค่าแบบเดียวกับที่คุณใช้ มีสองวิธีในการแก้ไขปัญหานี้:
- ให้วัตถุการกำหนดค่าเป็นตัวตั้งค่าที่ใช้สำหรับการทดสอบเท่านั้นเพื่อให้คุณสามารถส่งผ่านการตั้งค่าที่แตกต่างกัน
- ใช้วัตถุการกำหนดค่าต่อไป แต่เปลี่ยนจากซิงเกิลตันเป็นอินสแตนซ์ที่คุณต้องผ่านทุกที่ที่จำเป็น จากนั้นคุณสามารถสร้างมันครั้งเดียวในแอปพลิเคชันของคุณและอีกครั้งในการทดสอบของคุณด้วยการตั้งค่าที่แตกต่างกัน
แต่อย่างใดคุณยังคงมีปัญหาที่สอง: เกือบทุกชั้นสามารถใช้วัตถุกำหนดค่า ดังนั้นในการทดสอบคุณจำเป็นต้องตั้งค่าการกำหนดค่าสำหรับคลาสที่ทดสอบ แต่ยังเป็นการอ้างอิงทั้งหมดอีกด้วย สิ่งนี้สามารถทำให้รหัสทดสอบของคุณน่าเกลียด
ฉันเริ่มที่จะสรุปว่าวัตถุปรับแต่งแบบนี้เป็นความคิดที่ไม่ดี คุณคิดอย่างไร? มีทางเลือกอะไรบ้าง? และคุณจะเริ่มการปรับโครงสร้างแอปพลิเคชันที่ใช้การกำหนดค่าใหม่ได้ทุกที่อย่างไร