कई आधुनिक डेटाबेस एप्लिकेशन डॉक्ट्रिन ओआरएम परियोजना का उपयोग करते हैं।
डेटाबेस के साथ काम को सेवाओं तक ले जाना अच्छा व्यवहार माना जाता है। और सेवाओं का परीक्षण करने की आवश्यकता है।
सेवाओं का परीक्षण करने के लिए, आप एक परीक्षण डेटाबेस कनेक्ट कर सकते हैं, या आप एंटिटी मैनेजर और रिपॉजिटरी को लॉक कर सकते हैं। पहले विकल्प के साथ, सब कुछ स्पष्ट है, लेकिन सेवा का परीक्षण करने के लिए डेटाबेस को तैनात करने के लिए यह हमेशा समझ में नहीं आता है। हम इस बारे में बात करेंगे
उदाहरण के लिए, निम्नलिखित सेवा लें:
src / सेवा / उपयोगकर्ता / UserService.php हमें इसकी केवल create()
विधि का परीक्षण करने की आवश्यकता है।
निम्नलिखित मामलों का चयन करें:
- रेफरल के बिना सफल उपयोगकर्ता निर्माण
- संदर्भकर्ता के साथ सफल उपयोगकर्ता निर्माण
- त्रुटि "लॉगिन पहले ही लिया"
- त्रुटि "रेफ़रर नहीं मिला"
सेवा का परीक्षण करने के लिए, हमें एक ऐसी वस्तु की आवश्यकता होती है, जो Doctrine\ORM\EntityManagerInterface
इंटरफ़ेस को लागू करती है
विकल्प 1. हम एक वास्तविक डेटाबेस का उपयोग करते हैं
हम परीक्षणों के लिए एक आधार वर्ग लिखेंगे, जिसमें से हम बाद में वारिस होंगे।
अब यह पर्यावरण चर सेट करने के लिए परीक्षणों के लिए समझ में आता है। उन्हें phpunit.xml
फ़ाइल में php
अनुभाग में जोड़ें। मैं sqlite db का उपयोग करूंगा
phpunit.xml <?xml version="1.0" encoding="UTF-8"?> <phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/8.1/phpunit.xsd" bootstrap="vendor/autoload.php" executionOrder="depends,defects" forceCoversAnnotation="true" beStrictAboutCoversAnnotation="true" beStrictAboutOutputDuringTests="true" beStrictAboutTodoAnnotatedTests="true" verbose="true" colors="true"> <php> <env name="DB_DRIVER" value="pdo_sqlite" /> <env name="DB_PATH" value="var/db-test.sqlite" /> <env name="DB_USER" value="" /> <env name="DB_PASSWORD" value="" /> <env name="DB_NAME" value="" /> </php> <testsuites> <testsuite name="default"> <directory>tests/Unit</directory> </testsuite> </testsuites> <filter> <whitelist processUncoveredFilesFromWhitelist="true"> <directory suffix=".php">src</directory> </whitelist> </filter> </phpunit>
अब हम एक सेवा परीक्षण लिखेंगे
परीक्षण / यूनिट / सेवा / UserServiceTest.php सुनिश्चित करें कि हमारी सेवा ठीक से काम कर रही है
./vendor/bin/phpunit
विकल्प 2. MockBuilder का उपयोग करना
हर बार डेटाबेस बनाना कठिन होता है। विशेष रूप से फ़ापुनिट हमें मॉकब्युलर का उपयोग करके मक्खी पर मोकी इकट्ठा करने का अवसर देता है। एक उदाहरण सिम्फनी प्रलेखन में पाया जा सकता है ।
विकल्प काम कर रहा है, लेकिन समस्याएं हैं। आपको स्पष्ट रूप से यह जानने की आवश्यकता है कि कोड किस क्रम में EntityManager विधियों का उपयोग करता है।
उदाहरण के लिए, यदि कोई डेवलपर रेफ़रलकर्ता के अस्तित्व के लिए चेक स्वैप करता है और व्यस्त लॉगिन के लिए एक चेक, तो परीक्षण टूट जाएगा। लेकिन आवेदन नहीं है।
मैं स्मार्ट मोटिंग EntityManager के विकल्प का प्रस्ताव करता हूं, जो अपने सभी डेटा को मेमोरी में संग्रहीत करता है और एक वास्तविक डेटाबेस का उपयोग नहीं करता है।
विकल्प 3. हम मेमोरी में डेटा स्टोरेज के साथ MockBuilder का उपयोग करते हैं।
लचीलेपन के लिए, हम एक पर्यावरण चर जोड़ेंगे ताकि आप एक वास्तविक डेटाबेस का उपयोग कर सकें। आइए सर्दियों में phpunit.xml
phpunit.xml बदलता है <?xml version="1.0" encoding="UTF-8"?> <php> <env name="EMULATE_BD" value="1" /> </php>
अब आधार वर्ग को संशोधित करें
संशोधित परीक्षण / TestCase.php अब हम परीक्षण को फिर से चला सकते हैं और सुनिश्चित कर सकते हैं कि हमारी सेवा डेटाबेस से जुड़े बिना काम करती है।
./vendor/bin/phpunit
स्रोत कोड Github पर उपलब्ध है