2010-08-25 12 views
5

जब कोई त्रुटि जो PHPunit ढांचे की अपेक्षा नहीं होती है, तो परीक्षण बंद हो जाता है, और PHP त्रुटि फेंकता है, लेकिन PHPunit रिकॉर्ड नहीं करता है कि यह एक त्रुटि थी। मैं कैसे सुनिश्चित करूं कि PHPunit इसे एक त्रुटि के रूप में रिकॉर्ड करता है।PHPunit - त्रुटियां

+1

क्या आप उस पर विस्तार कर सकते हैं? आप किस तरह की त्रुटियों के बारे में बात कर रहे हैं? Phpunit की अपेक्षित आउटपुट क्या है, और वास्तविक आउटपुट क्या है? – janmoesen

+0

तो PHPunit में जो कुछ मैं समझता हूं उससे सम्मिलन, विफलताओं और त्रुटियां हैं। तो मान लें कि कोड में एक वाक्यविन्यास त्रुटि है। एक अतिरिक्त कॉमा या गायब अर्ध-कॉलन। यह एक निश्चित परीक्षण को चलाने में सक्षम नहीं होगा, और परीक्षण समाप्त हो जाएगा, लेकिन PHPunit इसे एक त्रुटि के रूप में रिपोर्ट नहीं करता है, और php त्रुटि आउटपुट करेगा, लेकिन PHPunit द्वारा इसका कोई लॉगिंग नहीं है। क्या PHPunit को केवल तर्कसंगत कोड दावों की बजाय सिंटैक्स त्रुटि की तरह कुछ लॉग करने के लिए मजबूर करने का कोई तरीका है? – Anthony

+0

क्या आप इस के लिए एक उदाहरणपूर्ण टेस्टकेस प्रदान कर सकते हैं (गंभीरता से) – Gordon

उत्तर

5

अस्वीकरण, मैं PHPUnit के लिए नया हूं और पूरी तरह से पता लगाने की कोशिश कर रहा हूं कि 'त्रुटि होने पर क्या होता है' भी।

PHPUnit's docs से

:

When the tested code contains PHP syntax errors, the TextUI test runner might exit without printing error information. The standard test suite loader can optionally check the test suite sourcefile for PHP syntax errors, but not sourcefiles included by the test suite sourcefile.

और विकल्प:

--syntax-check   Try to check source files for syntax errors. 
+0

मूल प्रश्न पर मेरी आखिरी टिप्पणी देखें। (यह डिफ़ॉल्ट रूप से छिपा हुआ है।) एक PHP वाक्यविन्यास त्रुटि प्रतीत नहीं होता है; केवल एक एसक्यूएल वाक्यविन्यास त्रुटि। – janmoesen

+0

@janmoesen मुझे पता है, लेकिन टिप्पणियों में ओपी भी कहता है, "तो मान लें कि कोड में एक वाक्यविन्यास त्रुटि है। एक अतिरिक्त कॉमा या गायब अर्द्ध-कोलन। इससे एक निश्चित परीक्षण चलने में सक्षम नहीं होगा, और परीक्षण समाप्त हो जाएगा, लेकिन PHPunit इसे एक त्रुटि के रूप में रिपोर्ट नहीं करता है, और php त्रुटि आउटपुट करेगा, लेकिन PHPunit द्वारा इसका कोई लॉगिंग नहीं है। " –

0

क्या ओ पी के बारे में बात कर रही है एक वाक्य रचना या PHP त्रुटि PHPUnit मार डालेगा है। PHP घातक त्रुटियां PHP इंटरप्रेटर को मारती हैं (या कम से कम रुकने का कारण बनती हैं), जिसका अर्थ है कि PHPUnit आगे नहीं बढ़ सकता है।

यदि आप वास्तव में इस मामले से बचना चाहते हैं तो आप निम्न में से कुछ बिट्स को एक स्क्रिप्ट में जोड़ सकते हैं। यह स्क्रिप्ट मानती है कि स्क्रिप्ट निर्देशिका में आपके परीक्षण (./) के साथ है और यह कि आपका कोड पेड़ ../ (सामान्य ZendFramework 1 सेटअप के समान सेटअप) से शुरू होता है। न इस स्क्रिप्ट के साथ कोड कवरेज का उपयोग कर से परेशान है, यह केवल पिछले रन unittest के लिए सही हो जाएगा:

#!/bin/bash 
    for i in $(find ../ -name "*.php"); do 
     msg=`php -l $i` 
     if [ "$?" != "0" ]; then 
      echo $msg; 
     fi 
    done 

    for i in $(find ./ -name "*Test.php"); do 
    echo "Running Test: $i"; 

    phpunit $i 
    done 

HTH।

0

ओएस को दुर्घटना से बचने के लिए आपको सामान्य PHP त्रुटि कैप्चर का उपयोग करके त्रुटि को कैप्चर करने की आवश्यकता होगी, जो तब होता है जब PHP इंटरप्रेटर त्रुटि का सामना करता है।

स्वचालित परीक्षणों को आपकी मुख्य विकास धारा के लिए प्रतिबद्ध होने से पहले जांच और परीक्षण किया जाना चाहिए।

मैं PHPUnit (phpunit ...> PHPUnit.log) से आउटपुट कैप्चर करता हूं जिसे मैं PHPUnit (स्किप/अपूर्ण, ठीक, असफलता, आदि के साथ सफलता ...) से स्थिति की तलाश कर रहा हूं और यदि यह है नहीं मिला, तो मुझे पता है कि PHPUnit पूरा नहीं हुआ, और एक त्रुटि हुई। त्रुटि के परिणाम टर्मिनल पर भी डाल दिए जाएंगे क्योंकि मेरे पास PHP को त्रुटियों को दिखाने के लिए कॉन्फ़िगर किया गया है।

एक त्रुटि पर, मैं बस इस लॉग फ़ाइल को विकास टीम, या जिस व्यक्ति ने परीक्षण फ़ाइल को अंतिम रूप में बदल दिया है, को जांचने के लिए मेल किया है। यदि स्क्रिप्ट रूट कारण/व्यक्ति को मेल भेजने के लिए निर्णय लेने का प्रयास करते हैं तो ईमेल के लिए तर्क जटिल हो सकता है। आम तौर पर, स्क्रिप्ट खुद को जांचने के लिए ईमेल करती है, और यदि मैं तुरंत जांच कर रहा हूं या अनुपलब्ध हूं तो विकास टीम ईमेल पर CC'd है।