2011-08-04 25 views
13

के माध्यम से phpunit परीक्षण चलाते समय $ _SERVER [''] चर सेट करने के लिए कैसे करें मैं एक ऐसे अनुप्रयोग के लिए यूनिट परीक्षण लिखने की कोशिश कर रहा हूं जहां बहुत से कोड परिवर्तन संभव नहीं हैं। लगभग कोड बेस में सभी .php फ़ाइलों का उपयोग करता है तो अब कुछ $ _SERVER [ ''] चरजेनकिन्स

require_once $_SERVER['DOCUMENT_ROOT'] . '/mainApi.php'; 

की तरह जब मैं लिख सकते हैं और PHPUnit परीक्षण मामलों मैं किसी भी तरह इन चरों सेट करने के लिए चलाने के लिए है। वर्तमान में मैं उपयोगकर्ता वातावरण में इन चरों की स्थापना कर रहा हूँ और उसके बाद हो रही इस तरह सर्वर चर ठीक काम कर रहा है

$_SERVER['DOCUMENT_ROOT'] = getenv('DOCUMENT_ROOT'); 
require_once $_SERVER['DOCUMENT_ROOT'] . '/mainApi.php'; 

कर। मैं कमांडलाइन के माध्यम से $ phpunit test.php के रूप में अपने परीक्षण चलाता हूं।

Ques1: क्या कमांडलाइन के माध्यम से phpunit परीक्षण चलाते समय $ _SERVER चर सेट करना संभव है?

मुझे इन यूनिट परीक्षणों को जेनकींस के माध्यम से भी चलाने की ज़रूरत है और मैं इन सर्वर चर को एएनटी/बिल्ड फ़ाइल के माध्यम से सेट करने में सक्षम नहीं हूं।

Ques2: जेनकिंस में एंटी बिल्ड फ़ाइल के माध्यम से या वेनकिन्स के माध्यम से phpunit परीक्षण निष्पादित करने से पहले किसी भी खोल स्क्रिप्ट को चलाने के द्वारा इन चर को सेट करना संभव है?

मैं सर्वर चर

<export name="setEnv" description="set server var"> 
    <exec executable="sh"> 
     <arg value = "sumit.sh" /> 
    </exec> 
</target> 

लेकिन इसके काम नहीं कर रहा जेनकींस

में build.xml में एक खोल स्क्रिप्ट

export DOCUMENT_ROOT=/server/path-to-root-dir 

के माध्यम से निर्यात और है कि स्क्रिप्ट कॉल करने की कोशिश। क्या कोई सेटिंग है जिसके लिए मैं कर सकता हूं? धन्यवाद!

उत्तर

6

मुझे यकीन नहीं है कि # 1 है, लेकिन PHPUnit को स्वयं इसका समर्थन करना होगा। मुझे कमांड लाइन के माध्यम से ऐसा करने का कोई तरीका नहीं दिखता है। हालांकि, अगर आप अपना वर्तमान वर्कअराउंड bootstrap.php में डालते हैं तो आपको प्रत्येक टेस्ट में इसे करने की ज़रूरत नहीं है।

# 2 के लिए, <exec> आप नेस्टेड <env> तत्वों का उपयोग वातावरण चर सेट करने के लिए अनुमति देता है। मैं जेनकींस में इसका इस्तेमाल करता हूं।

<exec executable="phpunit" ...> 
    <env key="DOCUMENT_ROOT" value="/var/www/php"/> 
</exec> 

अद्यतन: आप आमतौर पर bootstrap.php सेटअप करने के लिए शामिल करने के लिए पथ स्रोत निर्देशिका जोड़ने के लिए और परीक्षण वातावरण लेकिन आप की जरूरत को प्रारंभ पैदा करते हैं। यह फ़ाइल PHPUnit द्वारा प्रदान नहीं की जाती है - phpunit.xml के विपरीत।

मैं इसे phpunit.xml के समान निर्देशिका में रखता हूं, लेकिन ऐसा इसलिए है क्योंकि मेरे पास प्रत्येक प्रोजेक्ट के लिए एक अलग फ़ाइल है। यह निर्देशिका में जाता है जो आम तौर पर आपके परीक्षण रखता है। यह आपको कमांड लाइन से phpunit चलाने की अनुमति देता है बिना यह बताए कि उन कॉन्फ़िगरेशन फ़ाइलों को कैसे ढूंढें। अन्यथा आपको उन्हें इंगित करने के लिए --bootstrap और/या --configuration का उपयोग करना होगा।

<project-root>/ 
    build.xml 
    src/ 
     MyClass.php 
    test/ 
     MyClassTest.php 
     phpunit.xml 
     bootstrap.php 
+0

हम सेट कर सकते हैं '$ _SERVER [ 'DOCUMENT_ROOT']' निर्माण फ़ाइल के माध्यम से सीधे:

यहाँ कैसे मैं एक ठेठ परियोजना संरचना है?आपकी विधि '' पूरी तरह ठीक काम करती है लेकिन मेरे कोड में मेरे पास बहुत से सर्वर चर हैं जो मुझे सभी '$ _SERVER [] = getenv()' एक php फ़ाइल में और सभी परीक्षण कक्षाओं में उस फ़ाइल को आयात करना होगा। क्या कोई तरीका है कि हम इसे कम कर सकते हैं? – Sumitk

+0

@ सुमितक - आप 'bootstrap.php' में असाइनमेंट कर सकते हैं कि PHPUnit किसी भी परीक्षण को चलाने से पहले स्वचालित रूप से लोड हो जाता है। या तो फ़ाइल को अपने परीक्षणों की जड़ पर निर्देशिका में रखें या '--bootstrap' कमांड लाइन तर्क का उपयोग करके PHPUnit पर इंगित करें। –

+0

क्या यह 'bootstrap.php' एक फ़ाइल है जिसे हम परीक्षण फाइलों के साथ बनाते हैं या क्या यह PHPUnit के साथ आता है? Coz मैं इसे अपने सिस्टम पर नहीं देख सकता। अगर हम इसे बनाते हैं, तो मुझे इसे कहां रखना चाहिए? सभी परीक्षण फ़ाइलों के साथ या 'phpunit.xml.dist' के साथ? – Sumitk

संबंधित मुद्दे