मैं यूनिट परीक्षण कर रहा हूं और मेरी एक कक्षा में मुझे एक विधि से एक मेल भेजने की आवश्यकता है, इसलिए कंस्ट्रक्टर इंजेक्शन का उपयोग करके मैं Zend_Mailकक्षा का एक उदाहरण इंजेक्ट करता हूं जो ज़ेंड फ्रेमवर्क में है।
अब कुछ लोगों का तर्क है कि यदि कोई पुस्तकालय पर्याप्त रूप से स्थिर है और अक्सर नहीं बदलेगा तो उसे लपेटने की कोई आवश्यकता नहीं है। तो यह मानते हुए कि Zend_Mailयह स्थिर है और इसमें बदलाव नहीं होगा और यह मेरी जरूरतों को पूरी तरह से फिट करता है, तो मुझे इसके लिए रैपर की आवश्यकता नहीं होगी।
अब मेरी कक्षा पर एक नज़र डालें Loggerजो निर्भर करता है Zend_Mail:
class Logger{
private $mailer;
function __construct(Zend_Mail $mail){
$this->mail=$mail;
}
function toBeTestedFunction(){
//Some code
$this->mail->setTo('some value');
$this->mail->setSubject('some value');
$this->mail->setBody('some value');
$this->mail->send();
//Some
}
}
हालांकि, यूनिट परीक्षण की मांग है कि मैं एक समय में एक घटक का परीक्षण करता हूं, इसलिए मुझे Zend_Mailकक्षा का मजाक बनाने की आवश्यकता है । इसके अलावा मैं डिपेंडेंसी इनवर्जन सिद्धांत का उल्लंघन कर रहा हूं क्योंकि मेरी Loggerक्लास अब कंसट्रक्शन पर निर्भर करती है न कि एब्स्ट्रक्शन पर।
अब मैं कैसे परीक्षण कर सकते हैं Loggerरैपिंग बिना अलगाव में Zend_Mail?!
कोड PHP में है, लेकिन उत्तर होना जरूरी नहीं है। यह एक भाषा विशिष्ट विशेषता की तुलना में एक डिजाइन का मुद्दा है