4
ตกลงเพื่อแนะนำวิธีการที่ใช้เฉพาะระหว่างการทดสอบหน่วยหรือไม่
เมื่อเร็ว ๆ นี้ฉันกำลังใช้วิธีการจากโรงงาน TDDing วิธีการคือการสร้างวัตถุธรรมดาหรือวัตถุห่อในมัณฑนากร วัตถุตกแต่งอาจเป็นหนึ่งในหลายประเภทที่ขยาย StrategyClass ในการทดสอบของฉันฉันต้องการตรวจสอบว่าคลาสของวัตถุที่ส่งคืนเป็นไปตามที่คาดไว้หรือไม่ มันง่ายมากที่จะส่งคืนอ็อบเจ็กต์ธรรมดา แต่จะทำอย่างไรเมื่อมันถูกห่อไว้ในมัณฑนากร? ฉันใช้รหัสใน PHP ดังนั้นฉันจึงสามารถใช้ext/Reflectionเพื่อหาคลาสของวัตถุที่ถูกห่อ แต่ดูเหมือนว่าฉันจะมีความซับซ้อนมากเกินไปและค่อนข้างกฎเกณฑ์ของ TDD แต่ฉันตัดสินใจที่จะแนะนำgetClassName()ว่าจะส่งคืนชื่อคลาสของวัตถุเมื่อถูกเรียกจาก StrategyClass เมื่อเรียกจากมัณฑนากรอย่างไรก็ตามมันจะคืนค่าที่ส่งคืนโดยวิธีเดียวกันในวัตถุที่ตกแต่ง รหัสบางอย่างเพื่อให้ชัดเจนยิ่งขึ้น: interface StrategyInterface { public function getClassName(); } abstract class StrategyClass implements StrategyInterface { public function getClassName() { return \get_class($this); } } abstract class StrategyDecorator implements StrategyInterface { private $decorated; public function …