मैंने यूनिट टेस्ट क्लास के लिए एक छोटा सा सहायक फ़ंक्शन विकसित किया है, जो मेरा vector<unsigned char>
लेता है और इसे const char *
में परिवर्तित करता है। मैंने इसे लिखा है इसलिए मैं इसे सरल तुलना के लिए gtest's ASSERT_STREQ
मैक्रो में पास कर सकता हूं। संदेश यह है:सी ++ फ़ंक्शन रिटर्निंग कॉन्स char *
const char * convertVecToChar(std::vector<unsigned char>& source)
{
std::vector<unsigned char>::size_type size = source.size();
char* data = (char*)malloc(sizeof(char) * (size + 1));
memcpy(data, &source[0], size);
data[size] = 0;
return data;
}
और यहाँ की यह कहा जा रहा है एक उदाहरण है:
ASSERT_STREQ("de", convertVecToChar(somevector));
मुझे लगता है यह तथापि टपकाया है के रूप में मैं malloc
फोन कर रहा हूँ, लेकिन सड़क के नीचे आगे delete
बुला बिना?
क्या ऐसा करने के लिए एक और अधिक शानदार तरीका है, जिसमें एक परीक्षण विधि के भीतर ASSERT_STREQ
पर कॉल करने के लिए अलग-अलग const char *
परिवर्तनीय बनाने में शामिल नहीं है?
सभी प्रतिक्रियाओं के लिए अग्रिम में बड़ा धन्यवाद।
क्रिस
उपयोग 'मुक्त()' 'malloc के बाद()', नहीं 'delete'। एक दिलचस्प सवाल के लिए – hmjd
+1। हालांकि, मेरे पास वास्तव में कोई जवाब नहीं है। यह यूनिट परीक्षण के लिए सिर्फ एक विशाल हैक की तरह लगता है। क्या आपने 'ASSERT_VECEQ' बनाने पर विचार किया था? इसके अलावा, शायद आपको यूनिट परीक्षणों में मेमोरी लीक के लिए बहुत ज्यादा परवाह नहीं करना चाहिए। –
ठीक है, मुझे बताने के लिए धन्यवाद। –