2016-02-24 28 views
5

मैं वीएस 2015 एंटरप्राइज़ का उपयोग कर रहा हूं, और मैंने कोड कवरेज का विश्लेषण करने के लिए एक सामान्य यूनिट परीक्षण चलाया। मैं प्रति समारोह कवर ब्लॉक की सूची देख रहा हूं, और वे आम तौर पर सही लगते हैं। हालांकि, जब मैं किसी विधि पर राइट-क्लिक करता हूं -> "स्रोत कोड पर जाएं", कुछ फ़ंक्शंस पर यह स्रोत कोड (प्रासंगिक .cpp फ़ाइल) में सही स्थान पर जाता है, लेकिन अन्य पर यह हेडर फ़ाइल खोलने का प्रयास करता है (स्रोत पंक्ति संख्या सही है, लेकिन कोड .cpp फ़ाइल में है - .h फ़ाइल नहीं)। यह स्रोत कोड हाइलाइटिंग को प्रभावित करता है - वीएस सोचने वाले कार्यों को .cpp में हाइलाइट नहीं किया गया है। मैं फ़ंक्शन (समान दृश्यता, समान शीर्षलेख और स्रोत फ़ाइलों) में कोई अंतर निर्धारित नहीं कर सकता, सिवाय इसके कि उन्हें कौन सा धागा कहा जाता है। कोई विचार क्यों वीएस सोचता है कि कुछ कोड .cpp के बजाय .h में है?विजुअल स्टूडियो 2015 कोड कवरेज गलत फ़ाइल

+0

[mcve] मदद करेगा। क्या आप templated कार्यों का उपयोग कर रहे हैं? – AndyG

+0

मैं सहमत हूं। कोई templated काम नहीं। – Jeff

+0

प्रोजेक्ट x64 या x86 है? मुझे याद है कि x64 के साथ समस्याएं हैं। – AndyG

उत्तर

0

जाहिर है, भले ही वीएस 2015 सी ++ 11 फीचर non-static data member initializers (यह सही ढंग से संकलित करता है) का समर्थन करता है, कवरेज टूल इस सुविधा पर चोक करता है। यहां एमसीवीई है। मैं वीएस 14.0.24720.00 अद्यतन 1 का उपयोग कर रहा हूं। पुन: उत्पन्न करने के लिए, इस प्रोग्राम को संकलित करें, फिर Generic Test का उपयोग करके इसे चलाकर कोड कवरेज प्राप्त करें। यदि x प्रारंभ किया गया है, तो कवरेज टूल .h फ़ाइल में कन्स्ट्रक्टर के लिए कोड की तलाश करता है। यदि आप = 0 निकालते हैं, तो यह .cpp में कन्स्ट्रक्टर परिभाषा को सही ढंग से पहचानता है। मेरे उत्पाद कोड में, यह कन्स्ट्रक्टर नहीं था, लेकिन प्रतीत होता है कि यादृच्छिक कार्य है कि कवरेज टूल विचार को .h फ़ाइल में परिभाषित किया गया था। फिक्स, मेरे मामले में, केवल कंट्रोलर प्रारंभिक सूची में डेटा सदस्य प्रारंभिक स्थानांतरित करने के लिए था।

//.h 
class Test 
{ 
public: 
    Test(); 
    ~Test(); 

    void Func1(); 

    void Func2(); 

    void Func3(); 

    int x = 0; 
}; 

// .cpp 
#include "Test.h" 

#include <iostream> 

Test::Test() 
{ 
    std::cout << "in Test()" << std::endl; 
} 

Test::~Test() 
{ 
} 

void Test::Func1() 
{ 
    std::cout << "in Func1" << std::endl; 

    Func2(); 

    Func3(); 
} 

void Test::Func2() 
{ 
    std::cout << "in Func2" << std::endl; 
} 

void Test::Func3() 
{ 
    std::cout << "in Func3" << std::endl; 
} 
संबंधित मुद्दे