2012-04-20 7 views
21

मुझे वर्तमान में एक समस्या है कि मुझे PHP एक्सटेंशन के साथ हमारी बातचीत को ठीक से काम करने के लिए विरासत कोड में चारों ओर काम करना है (Singleton Testing Question)।PHPUnit टेस्ट चल रहे हैं या नहीं, यह निर्धारित करने के लिए कैसे?

इस प्रकार, मैं एप्लिकेशन के साथ हमारे सामान्य उत्पादन कोड को चलाने के दौरान इस कोड को निष्पादित नहीं करना चाहता हूं। इसलिए, अगर मुझे निष्पादित किया जा रहा कोड को परीक्षण के हिस्से के रूप में निष्पादित किया जा रहा है, तो मुझे नियमित PHP कोड में जांच करने की आवश्यकता है।

यह निर्धारित करने के तरीके पर कोई सुझाव? मैंने परीक्षण फाइलों की उपस्थिति से जुड़े एक परिभाषित चर के बारे में सोचा (हम ग्राहकों को परीक्षण नहीं भेजते हैं) लेकिन हमारे डेवलपर्स को सामान्य रूप से काम करने के लिए एक्सटेंशन की आवश्यकता होती है, जबकि सीआई सर्वर को परीक्षण चलाने की आवश्यकता होती है।

क्या PHPUnit.xml फ़ाइल में एक वैश्विक सेट की सिफारिश की जाएगी? अन्य विचार?

उत्तर

23

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

+0

धन्यवाद। यह एक आकर्षण की तरह काम करता है, और मैं अभी भी अन्य कोड प्रक्रियाओं के लिए अपने विकास पर्यावरण का पता लगा सकता हूं। –

+0

बिल्कुल सही, यहां बहुत अच्छा काम किया। बहुत बहुत धन्यवाद। – GoinAum

29

एक वैकल्पिक दृष्टिकोण set a constant in the PHP section of your phpunit.xml.* के लिए है:

if (defined('PHPUNIT_YOURAPPLICATION_TESTSUITE') && PHPUNIT_YOURAPPLICATION_TESTSUITE) 
{ 
    echo 'TestSuite running!'; 
} 
+0

ध्यान रखें कि PHP एक स्ट्रिंग के रूप में अवांछित स्थिरता का अजीब मूल्यांकन करता है (यदि 'EXAMPLE' परिभाषित नहीं किया गया है, तो इसका मूल्यांकन 'EXAMPLE' 'के रूप में किया जाता है। मतलब, आपको' === 'का उपयोग करके इसका सही मूल्यांकन करना चाहिए। अभी भी एक अपरिभाषित निरंतरता के बारे में अधिसूचना फेंक दें। –

+2

'===' टाइप अप से मेल नहीं खाएगा, और चूंकि इसे 'सत्य' (एक बूलियन) के रूप में परिभाषित किया गया है लेकिन वह जांच कर रहा है कि यह '1' (एक पूर्णांक) है या नहीं। , यह असफल हो जाएगा? मैं आपकी टिप्पणी समझता हूं, लेकिन इस उदाहरण में, '==' बेहतर है। –

+3

आपके उत्तर के लिए धन्यवाद मैंने पाया कि ('लार्वेल 5' में)' APP_ENV' 'परीक्षण' पर सेट है। यह वास्तव में आपके उत्तर को कार्यान्वित करने में आसान तरीका है। मैं वास्तव में लार्वेल के लिए इस समाधान की अनुशंसा करता हूं। –

10

आप अलग अलग तरीकों से जांच कर सकता है:

<php> 
    <const name="PHPUNIT_YOURAPPLICATION_TESTSUITE" value="true"/> 
</php> 

अपने PHP आवेदन में, आप उसके बाद निम्न जांच का उपयोग हो सकता है।

if(PHP_SAPI == 'cli') { 

    if(strpos($_SERVER['argv'][0], 'phpunit') !== FALSE) { ... } 
    // or 
    if($_SERVER['argv'][0] == '/usr/bin/phpunit') { ... } 

} 
+2

$ _SERVER ['argv'] [0] $ argv [0] –

1

मैं लैरवेल लॉग फ़ाइल का उपयोग यह निर्धारित करने के लिए करता हूं कि PHPUnit टेस्ट चल रहे हैं या नहीं।

+5

लार्वेल में phpunit.xml 'APP_ENV' को ' परीक्षण '। शायद लॉग फ़ाइल की तुलना में आपके लिए यह आसान है? (केवल एक सुझाव) –

+0

धन्यवाद, जानना अच्छा है। –

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

  • कोई संबंधित समस्या नहीं^_^