मैं परीक्षण कवरेज (Google टेस्ट फ्रेमवर्क के साथ लिखे गए टेस्ट) की जांच करने के लिए जीसीओवी का भी उपयोग कर रहा हूं, इसके अतिरिक्त मैं एक्सेलिप्स जीसीओवी एकीकरण प्लगइन या एलसीओवी उपकरण का उपयोग करता हूं ताकि परीक्षण कवरेज परिणामों के विचारों का निरीक्षण करने में आसानी हो सके। कच्चे जीसीओवी आउटपुट का उपयोग करना बहुत कठिन है :-(
यदि आपके पास केवल टेम्पलेट लाइब्रेरी हैंडर हैं, तो आपको टेम्प्लेट क्लासेस और टेम्पलेट सदस्य फ़ंक्शंस को तत्काल करने वाले आपके परीक्षण कक्षाओं (जी ++ ध्वज - पुनर्प्राप्ति का उपयोग करके) भी उपकरण की आवश्यकता है इन के लिए उचित GCov आउटपुट को देखने के लिए।
उल्लेख उपकरण यह टेम्पलेट कोड है कि परीक्षण के मामले के साथ बिल्कुल instantiated नहीं किया गया था को पहचानना आसान है के साथ
है, क्योंकि यह कोई टिप्पणियां हैं।
मैं सेटअप एक नमूना है और एलसीओवी आउटपुट को एक ड्रॉपबॉक्स लिंक पर कॉपी किया गया है जिसका आप निरीक्षण कर सकते हैं।
नमूना कोड (टी
TemplateSample.hpp
template<typename T>
class TemplateSample
{
public:
enum CodePath
{
Path1 ,
Path2 ,
Path3 ,
};
TemplateSample(const T& value)
: data(value)
{
}
int doSomething(CodePath path)
{
switch(path)
{
case Path1:
return 1;
case Path2:
return 2;
case Path3:
return 3;
default:
return 0;
}
return -1;
}
template<typename U>
U& returnRefParam(U& refParam)
{
instantiatedCode();
return refParam;
}
template<typename U, typename R>
R doSomethingElse(const U& param)
{
return static_cast<R>(data);
}
private:
void instantiatedCode()
{
int x = 5;
x = x * 10;
}
void neverInstantiatedCode()
{
int x = 5;
x = x * 10;
}
T data;
};
TemplateSampleTest.cpp
#include <string>
#include "gtest/gtest.h"
#include "TemplateSample.hpp"
class TemplateSampleTest : public ::testing::Test
{
public:
TemplateSampleTest()
: templateSample(5)
{
}
protected:
TemplateSample<int> templateSample;
private:
};
TEST_F(TemplateSampleTest,doSomethingPath1)
{
EXPECT_EQ(1,templateSample.doSomething(TemplateSample<int>::Path1));
}
TEST_F(TemplateSampleTest,doSomethingPath2)
{
EXPECT_EQ(2,templateSample.doSomething(TemplateSample<int>::Path2));
}
TEST_F(TemplateSampleTest,returnRefParam)
{
std::string stringValue = "Hello";
EXPECT_EQ(stringValue,templateSample.returnRefParam(stringValue));
}
TEST_F(TemplateSampleTest,doSomethingElse)
{
std::string stringValue = "Hello";
long value = templateSample.doSomethingElse<std::string,long>(stringValue);
EXPECT_EQ(5,value);
}
कोड कवरेज lcov यहाँ से उत्पन्न उत्पादन देखें: emplateSampleTest.cpp जी ++ --coverage
विकल्प) का उपयोग कर instrumented है:
TemplateSample.hpp coverage
चेतावनी: 'कार्य' आंकड़े 100% के रूप में रिपोर्ट किए जाते हैं, जो तत्काल टेम्पलेट कार्यों के बारे में वास्तव में सच नहीं है।
आपको लगता है कि सभी सार्वजनिक तरीकों और कार्यों कॉल इकाई परीक्षण सुनिश्चित कर सकते हैं कि आप अपने * .gcno फ़ाइलें आरंभ (ताकि lcov के लिए) बनाते हैं। आपको कवरेज के साथ-साथ परीक्षण भी मिलेगा कि यह एक ही समय में काम करता है। –
हाँ, लेकिन अगर मैं किसी फ़ंक्शन को याद करता हूं तो मैं आसानी से स्पॉट करना चाहता हूं, और यह अच्छा होगा अगर मैं अपने सीडीएश से ब्राउज़ कर सकूं और <100% कवरेज के साथ हेडर देख सकूं। – pascal
मैं इस प्रश्न के अच्छे जवाब के बाद भी हूं। 1. मैं मानता हूं कि अनचाहे तत्काल देखना अच्छा लगेगा। 2।मैंने सदस्य टेम्पलेट्स (टेम्पलेट कक्षाओं में) के लिए कोई परिणाम नहीं देखा है, जहां मुझे पूरी तरह से यकीन है कि ये तत्काल हैं और मेरे परीक्षण कोड के भीतर बुलाए गए हैं (जो थोड़ा अजीब है)। –