PHP - कोड कवरेज - कुछ लाइनों को कवर नहीं किया जा सकता ... (नेटबीन्स)

मेरे नेटबीन में मैंने PHPUnit के साथ एक प्रोजेक्ट (ZF2 ऐप) स्थापित किया है। सबकुछ ठीक है जब मैं कोड कवरेज एकत्र करने का प्रयास करता हूं, यह कुछ लाइनों को कवर करने में विफल रहता है, जिन्हें मैं समझ नहीं पा रहा हूं और न ही समझा सकता हूं।

कोड इस तरह है:

    switch($type) {
        case 'date':
            return date('Y-m-d', strtotime($value));
        case 'numeric':
        default:
            return $value;
    }

यूनिटटेस्ट दोनों मामलों के परीक्षण के बाद, स्विच स्टेटमेंट का समापन ब्रैकेट कवर नहीं है।

अन्य उदाहरण:

    foreach ($this->userRoleNames as $role) {
        if (self::$acl->hasResource($moduleName)) {
            if (self::$acl->isAllowed($role, $moduleName)) {
                return true;
            }
/* > */ }

        if (self::$acl->hasResource($privilageName)) {
            if (self::$acl->isAllowed($role, $privilageName)) {
                return true;
            }
/* > */ }

        if (self::$acl->hasResource($privilageNameFull)) {
            if (self::$acl->isAllowed($role, $privilageNameFull)) {
                return true;
            }
/* > */ }
    }

Here all the lines containing /* > */ are also not covered, even the Unit Tests are testing for any possible combinations of conditions.

इन अनदेखी लाइनों के कारण मैं 100% कोड कवरेज तक पहुंचने में सक्षम नहीं हूं।

मै इस्तेमाल कर रहा हूँ

  • PHPUnit 3.7.22
  • PHP 5.3.10-1ubuntu3.8 सुहोसिन-पैच के साथ
  • नेटबीन्स 7.4 (बी। 201310111528)

नोटिस: अजीब बात यह है कि अन्य if , foreach या switch कथन में, जो वापसी कोई मान नहीं है , उनका समापन ब्रैकेट } कवर के रूप में मेल नहीं खाता है और न ही अनदेखा (कवर लाइनों को हरा, अनदेखा लाल हाइलाइट किया गया है - ये केवल सफेद हैं - संलग्न आईएमजी देखें) इस प्रकार कोई प्रभाव नहीं है कोड कवरेज प्रतिशत पर ...

क्या कोई तरीका है कि मैं PHPUnit (एनबी में कोड कवरेज मॉड्यूल) कैसे बना सकता हूं या PHPUnit परीक्षण कवर को ऐसी लाइनों को समायोजित करके कैसे कर सकता हूं?

Code coverage example from NetBeans

4

1 उत्तर

निचले स्क्रीनशॉट में शामिल नहीं } स्पष्ट है - केस क्लॉज में रिटर्न स्टेटमेंट के कारण यह कभी नहीं पहुंचा है। इसी कारण से स्विच ($ प्रकार) ब्लॉक पूरी तरह से कवर नहीं किया गया है (मुझे लगता है) सफेद पृष्ठभूमि में परिणाम।

केवल स्विच क्लॉज को रिफैक्टर करें, जो केस ब्लॉक में मान वापस नहीं लौटाते हैं, लेकिन रिटर्न वैल्यू असाइन करते हैं, जो फ़ंक्शन के अंत में लौटाया जाता है।

3
जोड़ा
मूल्यों को वापस न करने के लिए स्विच को बदल दिया, लेकिन उन्हें असाइन करें, और बाद में लौटें - कोई परिवर्तन नहीं, फिर भी स्विच क्लोजिंग ब्रैकेट कवर नहीं है । लेकिन, मैंने डिफ़ॉल्ट: खंड को हटा दिए जाने के बाद, अब कोड 100% तक कवर किया गया है और यह बंद ब्रैकेट सफेद है (ऊपर कूद गया है)। वैसे भी, यह मेरे प्रश्न में परिभाषित if कथन के साथ समस्या का समाधान नहीं करता है ...
जोड़ा लेखक shadyyx, स्रोत
और यदि आप जो कह रहे हैं, वह सत्य होगा, किसी भी बंद विधि के ब्रैकेट को कवर नहीं किया जा सकता है, साथ ही आपके पास return ...; है ... अजीब लगता है ...
जोड़ा लेखक shadyyx, स्रोत
कवरेज-विश्लेषण PHP द्वारा ही नहीं किया जाता है लेकिन उदाहरण के लिए xdebug द्वारा किया जाता है। यह उपकरण बहुत अच्छे हैं लेकिन सही नहीं हैं। तो यह xdebug में बस एक बग हो सकता है। मैंने उन मामलों पर ठोकर खाई जहां पूरे तरीके जहां मृत कोड के रूप में घोषित किया गया, जबकि मैंने अपने टर्मिनल पर अपना आउटपुट देखा है।
जोड़ा लेखक l-x, स्रोत