สาเหตุที่ทำข้อสอบคลาสซิงเกิลตันยากคือ ที่คุณไม่สามารถเริ่มต้นคลาสสำหรับการทดสอบแต่ละครั้งได้อีก เพราะสามารถเริ่มต้นได้เพียงครั้งเดียว (และดังนั้น ช่วยให้คุณตั้งค่าทั้งหมดได้อย่างถูกต้องสำหรับการทดสอบแต่ละครั้ง)
ทำไมสอบซิงเกิลตันยาก
มันยากที่จะทดสอบโค้ดที่ใช้ซิงเกิลตัน
คุณไม่สามารถควบคุมการสร้างออบเจกต์ซิงเกิลตันได้เพราะบ่อยครั้งที่โค้ดนั้นถูกสร้างขึ้นใน static initializer หรือ static method. ด้วยเหตุนี้ คุณจึงไม่สามารถล้อเลียนพฤติกรรมของอินสแตนซ์ Singleton นั้นได้
ซิงเกิลตันมีปัญหาอะไร
Singletons ขัดขวางการทดสอบหน่วย: Singleton อาจทำให้เกิดปัญหาสำหรับ การเขียนโค้ดที่ทดสอบได้ หากวัตถุและวิธีการที่เกี่ยวข้องกันแน่นเกินไปจนไม่สามารถทดสอบได้โดยไม่ต้องเขียน คลาสสำหรับซิงเกิลตันโดยเฉพาะ
ข้อเสียของซิงเกิลตันในการทดสอบหน่วยคืออะไร
ในการรันโค้ดที่มีซิงเกิลตันในชุดทดสอบ เราต้องผ่อนคลายคุณสมบัติซิงเกิลตัน นี่คือวิธีที่เราทำ ขั้นตอนแรกคือ เพิ่มวิธีสแตติกใหม่ในคลาสซิงเกิลตัน วิธีนี้ช่วยให้เราสามารถแทนที่อินสแตนซ์แบบคงที่ในซิงเกิลตัน
ทำไมซิงเกิลตันถึงรบกวนการทดสอบหน่วย
ในการทดสอบหน่วย แต่ละหน่วยการทดสอบควรเป็นอิสระจากกัน อีกเหตุผลหนึ่งที่รูปแบบการออกแบบ Singleton ทำให้ชีวิตของคุณยากในการทดสอบหน่วยคือ เพราะพวกเขายังคงอยู่ในหน่วยความจำจนกว่าแอปพลิเคชันจะมีชีวิตอยู่ ดังนั้นพวกเขาจึงคงสถานะตราบเท่าที่แอปพลิเคชันยังคงอยู่ใน หน่วยความจำ