जब मैं अपने मॉड्यूल लिख रहा होता हूं, तो मैं उन्हें एप्लिकेशन के सबसे महत्वपूर्ण भागों के लिए यूनिट-परीक्षणों के साथ आपूर्ति करने की कोशिश कर रहा हूं। हालाँकि, इस समय (मैगेंटो 2.1.3) यूनिट परीक्षण लिखने के कई तरीके हैं:
परीक्षण के विभिन्न तरीके
- इसके साथ इंटीग्रेट करें
bin/magento dev:tests:run unitऔर इसे Magento के साथ तयशुदा phpunit सेटिंग्स के शीर्ष पर चलाएं। - उन्हें अलग से लिखें, उन्हें चलाएं
vendor/bin/phpunit app/code/Vendor/Module/Test/Unitऔर वह सब कुछ मॉक करें जो मैगेंटो है। - उन्हें अलग से लिखें, सब कुछ मॉक करें और PHPUnit के सिस्टम-ग्लोबल संस्करण का उपयोग करें।
- उन्हें अलग से लिखें, उनके साथ चलाएं
vendor/bin/phpunit, लेकिन फिर भी उपयोग करें\Magento\Framework\TestFramework\Unit\Helper\ObjectManager।
Magento 2 और PHPUnit
इसके अलावा, Magento 2 PHPUnit 4.1.0 के साथ आता है, जो PHP7- संगत नहीं है। टाइप-हिंटिंग नेटिव्स (जैसे stringऔर `इंट) और आपके हस्ताक्षरों में रिटर्न प्रकार घोषित करने से त्रुटियां होंगी। उदाहरण के लिए, इस तरह एक विधि हस्ताक्षर के साथ एक इंटरफ़ेस / वर्ग:
public function foo(string $bar) : bool;
... PHPUnit 4.1.0 द्वारा मजाक नहीं किया जा सकेगा। :-(
मेरी वर्तमान स्थिति
यह इस कारण से है कि मैं अब अपने यूनिट परीक्षणों को तीसरे तरीके से लिख रहा हूं (सिस्टम-ग्लोबल PHPUnit संस्करण को कॉल करके)।
मेरे सेटअप में, मेरे पास PHPUnit 5.6 विश्व स्तर पर स्थापित है, इसलिए मैं उचित PHP7-कोड लिख सकता हूं, लेकिन मुझे कुछ ट्विक्स करने होंगे। उदाहरण के लिए:
phpunit.xml इस तरह दिखना है तो मैं संगीतकार ऑटोलैडर का उपयोग कर सकता हूं:
<?xml version="1.0"?>
<phpunit bootstrap="../../../../../../vendor/autoload.php"
colors="true">
<testsuites>
<testsuite name="Testsuite">
<directory>.</directory>
</testsuite>
</testsuites>
</phpunit>
... और मेरे सभी setUp()मैथोड्स में, मेरे पास निम्नलिखित जांच है ताकि मैं अपने परीक्षणों को आगे-संगतता के साथ लिख सकूं:
// Only allow PHPUnit 5.x:
if (version_compare(\PHPUnit_Runner_Version::id(), '5', '<')) {
$this->markTestSkipped();
}
इस तरह, जब मेरे परीक्षण को मैजेंटोस द्वारा निर्मित PHPUnit में चलाया जाता है, तो यह एक त्रुटि नहीं है।
मेरा प्रश्न
तो यहाँ मेरा सवाल है: क्या यह इकाई परीक्षणों को लिखने का एक 'स्वस्थ' तरीका है? क्योंकि यह मुझे सही नहीं लगता कि मैगेंटो परीक्षण के साथ सहायता करने के लिए उपकरणों की एक पूरी गुच्छा के साथ बंडल में आता है और मैं PHP7 के साथ होने के कारण उनका उपयोग नहीं कर सकता। मुझे पता है कि GitHub पर टिकट हैं जो इस मुद्दे को संबोधित करते हैं, लेकिन मुझे आश्चर्य है कि समुदाय वर्तमान में कैसे लिख रहा है यह परीक्षण है।
क्या Magento 2 में यूनिट टेस्ट लिखने का एक तरीका है, इसलिए मुझे अपने कोड को 'डाउनग्रेड' करने की आवश्यकता नहीं है और फिर भी ऑब्जेक्ट मैनेजर को सब कुछ मॉक करने के लिए मैगेंटोस के अंतर्निहित हेल्पर्स का उपयोग कर सकते हैं? या आपके यूनिट परीक्षणों में भी वस्तु प्रबंधक का उपयोग करना बुरा है?
मैं अपने स्वयं के कस्टम मॉड्यूल का परीक्षण करने के तरीके पर उचित मार्गदर्शन / उदाहरणों की बहुत कमी कर रहा हूं।