संक्षिप्त उत्तर है PHPUnit मैनुअल में डेटाबेस परीक्षण पर फाइन मैनुअल प्रविष्टि पढ़ें ।
और अब लंबा जवाब ...
इकाई परीक्षण के बारे में याद रखने वाली पहली बात यह है कि इसे अलगाव . में निष्पादित करने की आवश्यकता है अन्य सभी घटकों से। अक्सर, इस लक्ष्य को निर्भरता इंजेक्शन जैसी इनवर्जन ऑफ कंट्रोल (IoC) तकनीकों का उपयोग करके सरल बनाया जाता है। . जब आपकी कक्षाएं स्पष्ट रूप से कंस्ट्रक्टर विधियों में उनकी निर्भरता के लिए पूछती हैं तो यह मजाक वे निर्भरताएँ ताकि आप शेष कोड को अलग-थलग करके जाँच सकें।
परीक्षण कोड जो मॉडल के साथ इंटरैक्ट करता है, हालांकि थोड़ा अलग है। आमतौर पर अपने मॉडलों को उस वर्ग में इंजेक्ट करना व्यावहारिक या उचित नहीं है जिसमें आपको उन्हें एक्सेस करने की आवश्यकता होती है। आपके मॉडल आम तौर पर "गूंगा" डेटा संरचनाएं होती हैं जो सीमित या कोई क्षमता नहीं दिखाती हैं। नतीजतन, यह आम तौर पर स्वीकार्य है (टेस्टेबिलिटी के मामले में) आपके मॉडल को आपके अन्यथा इंजेक्शन वाली कक्षाओं के अंदर फ्लाई पर तुरंत चालू करने के लिए। दुर्भाग्य से, यह परीक्षण डेटाबेस कोड को कठिन बना देता है, क्योंकि PHPUnit दस्तावेज़ीकरण नोट करता है:
तो अगर मॉडल सीधे इंजेक्शन नहीं हैं तो आप डेटाबेस से इंटरैक्ट करने वाले कोड को अलग और परीक्षण कैसे करते हैं? ऐसा करने का सबसे आसान तरीका है परीक्षण जुड़नार का उपयोग करना ।
चूंकि आप निश्चित रूप से पहले से ही PDO
. का उपयोग कर रहे हैं या एक ORM पुस्तकालय जो PDO
. पर निर्मित होता है (दाएं?), जुड़नार स्थापित करना आपके परीक्षण मामलों को समायोजित करने के लिए डेटा के साथ एक मूल SQLite डेटाबेस या XML फ़ाइल को सीड करने और डेटाबेस के साथ इंटरैक्ट करने वाले कोड का परीक्षण करते समय उस विशेष डेटाबेस कनेक्शन का उपयोग करने जितना आसान है। आप इस कनेक्शन को अपनी PHPUnit बूटस्ट्रैप फ़ाइल में निर्दिष्ट कर सकते हैं, लेकिन यह संभवतः एक PHPUnit डेटाबेस टेस्टकेस
।
डीबी कोड के परीक्षण के लिए आम तौर पर स्वीकृत सर्वोत्तम अभ्यास चरण (ये डीबी परीक्षण पर PHPUnit दस्तावेज़ में भी प्रतिध्वनित होते हैं):
- फिक्स्चर सेट करें
- व्यायाम प्रणाली परीक्षण के तहत
- परिणाम सत्यापित करें
- टियरडाउन
इसलिए, संक्षेप में, आपको बस एक "डमी" डेटाबेस फ़िक्स्चर बनाने की ज़रूरत है और अपने कोड को उस वास्तविक डेटाबेस के बजाय उस ज्ञात डेटा के साथ इंटरैक्ट करना है जो आप उत्पादन में उपयोग करेंगे। यह विधि आपको परीक्षण के तहत कोड को सफलतापूर्वक अलग करने की अनुमति देती है क्योंकि यह ज्ञात डेटा से संबंधित है, और इसका मतलब है कि आप अपने डेटाबेस संचालन के परिणामों के बारे में विशिष्ट/परीक्षण योग्य दावा कर सकते हैं।
अपडेट करें
सिर्फ इसलिए कि यह नहीं के लिए एक असाधारण रूप से उपयोगी मार्गदर्शिका है यदि आप टेस्टेबिलिटी को बढ़ावा देना चाहते हैं तो अपने कोड में करने के लिए, मैं मिस्को हेवरी के 3v1L, अनटेस्टेबल कोड कैसे लिखें . यह विशेष रूप से डेटाबेस परीक्षण में शामिल नहीं है, लेकिन फिर भी यह सहायक है। हैप्पी टेस्टिंग!
अपडेट 2
मैं मॉडल परीक्षण को बंद करने के बारे में टिप्पणी का जवाब देना चाहता था क्योंकि मौजूदा कोड आधार PDO
लागू नहीं करता है डेटाबेस एक्सेस के लिए:
आपके मॉडल को PHPUnit के DbUnit एक्सटेंशन को लागू करने के लिए PDO का उपयोग करने की आवश्यकता नहीं है।
यदि आप पीडीओ का उपयोग करते हैं तो यह आपके जीवन को थोड़ा आसान बना देगा, लेकिन आपको ऐसा करने की आवश्यकता नहीं है। मान लीजिए, उदाहरण के लिए, आपने अपना एप्लिकेशन PHP के अंतर्निर्मित pg_*
के साथ बनाया है पोस्टग्रेएसक्यूएल कार्य करता है। PHPUnit आपको अभी भी फिक्स्चर निर्दिष्ट करने की अनुमति देता है और यह अभी भी प्रत्येक परीक्षण के लिए उनका पुनर्निर्माण कर सकता है - आपको उसी संसाधन पर परीक्षण करते समय बस अपने कनेक्शन को इंगित करने की आवश्यकता होगी जो DbUnit एक्सटेंशन अपने स्थिरता के लिए उपयोग करता है।