Visual Studio 2005 के साथ Google C ++ टेस्टिंग फ्रेमवर्क (gtest) कैसे सेट करें


82

यह वेब साइट पर प्रलेखित नहीं है और लोगों को ढांचा स्थापित करने में समस्या हो रही है। क्या कोई कृपया नमूना परियोजना सेटअप के लिए चरण-दर-चरण परिचय दिखा सकता है?


खुशी है कि किसी ने पूछा ...
बोयांग

जवाबों:


44

अरलहेन ने जो कहा, वह मूल रूप से सही था, सिवाय इसके कि उसने उस हिस्से को छोड़ दिया जो आपके लिंकर की त्रुटियों की व्याख्या करता है। सबसे पहले, आपको एक रनटाइम लाइब्रेरी के रूप में सीआरटी के बिना अपना आवेदन बनाने की आवश्यकता है । आपको हमेशा यह करना चाहिए, क्योंकि यह वास्तव में आपके आवेदन के वितरण को सरल करता है। यदि आप ऐसा नहीं करते हैं, तो आपके सभी उपयोगकर्ताओं को विजुअल C ++ रनटाइम लाइब्रेरी स्थापित करने की आवश्यकता है, और जो लोग अपने सिस्टम पर रहस्यमय DLL के लापता होने के बारे में शिकायत नहीं करेंगे ... अतिरिक्त कुछ सौ किलोबाइट के लिए जो इसे लिंक करने में खर्च होते हैं CRT सांख्यिकीय रूप से, आप बाद में समर्थन में खुद को बहुत अधिक सिरदर्द से बचाते हैं (मुझे इस पर भरोसा करें - मैंने इसे कठिन तरीका सीखा है!)।

वैसे भी, ऐसा करने के लिए, आप लक्ष्य के गुणों में जाते हैं -> C / C ++ -> कोड जनरेशन -> रनटाइम लाइब्रेरी, और इसे आपके रिलीज़ बिल्ड और "मल्टी-थ्रेडेड डीबग" के लिए "मल्टी-थ्रेडेड" के रूप में सेट करने की आवश्यकता है। आपका डीबग बिल्ड।

चूंकि gtest पुस्तकालय उसी तरह से बनाया गया है, क्या आप वाकई का सही वर्शन से लिंक कर रहे हैं बनाने की जरूरत है यह , वरना लिंकर क्रम पुस्तकालय की एक प्रति है, जो त्रुटि आप btw देखा (है में प्राप्त कर लेगा, इस यदि आप MFC का उपयोग कर रहे हैं या नहीं) तो फर्क नहीं पड़ना चाहिए। आपको एक डीबग और रिलीज़ मोड के रूप में gtest बनाने और दोनों प्रतियां रखने की आवश्यकता है। फिर आप अपने रिलीज़ बिल्ड में gtest.lib / gtest_main.lib और अपने डीबग बिल्ड में gtestd.lib / gtest_maind.lib के साथ लिंक करते हैं।

इसके अलावा, आपको यह सुनिश्चित करने की आवश्यकता है कि आपका एप्लिकेशन उस निर्देशिका को इंगित करता है जहां gtest हैडर फ़ाइलें संग्रहीत हैं (गुणों में -> C / C ++ -> सामान्य -> ​​अतिरिक्त शामिल निर्देशिकाएँ), लेकिन अगर आपको लिंकर त्रुटि मिली है, तो मुझे लगता है। आप पहले से ही इस भाग को सही करने में कामयाब रहे, वरना पहले से निपटने के लिए आपके पास बहुत अधिक संकलक त्रुटियां होंगी।


मैंने इसे "कठिन रास्ता" सीखा है, जो मेरा सारा दिन बिता रहा है। अंत में मुझे यह काम मिला, दोनों को एक ही तरह से बनाने के बाद। आपके उत्तर के लिए धन्यवाद, लेकिन देर हो चुकी है। : / और BTW, आपका CRT सुझाव गलत है, लेकिन मेरे पास इस पर चर्चा करने के लिए पर्याप्त स्थान नहीं है। देखें tinyurl.com/dj5k7k
knaser

यदि आपने इसे "कठिन तरीका" सीखा है, तो आप भूल सकते हैं कि CRT रनटाइम dll को "पुनर्वितरण योग्य" कहा जाता है ... इसलिए आपको यह स्पष्ट है कि आपको उन्हें स्वयं पुनर्वितरित करना होगा ... या तो अपने इंस्टॉलर में रिडिस्ट इंस्टॉलर को शामिल करके , या बस अपने स्वयं के स्थापना फ़ोल्डर में आवश्यक dlls निकालने के द्वारा ... (यदि आवश्यक हो तो प्रकट फ़ाइल सहित)
smerlin

1
CRT को स्टेटिकली लिंक करने का मतलब है कि आपका आवेदन
शोइट

106

(इन निर्देशों से डिबग कॉन्फ़िगरेशन के लिए परीक्षण रूपरेखा काम कर रही है। रिलीज कॉन्फ़िगरेशन के लिए समान प्रक्रिया को लागू करने के लिए यह बहुत तुच्छ होना चाहिए।)

Google C ++ टेस्टिंग फ्रेमवर्क प्राप्त करें

  1. नवीनतम gtest फ्रेमवर्क डाउनलोड करें
  2. करने के लिए खोल दो C:\gtest

फ्रेमवर्क पुस्तकालयों का निर्माण

  1. C:\gtest\msvc\gtest.slnविजुअल स्टूडियो में खोलें
  2. कॉन्फ़िगरेशन को "डीबग" पर सेट करें
  3. समाधान बनाएँ

अपना परीक्षण प्रोजेक्ट बनाएं और कॉन्फ़िगर करें

  1. एक नया समाधान बनाएं और टेम्पलेट विजुअल C ++> Win32> Win32 कंसोल एप्लिकेशन चुनें
  2. नई बनाई गई परियोजना पर राइट क्लिक करें और गुण चुनें
  3. कॉन्फ़िगरेशन को डीबग में बदलें।
  4. कॉन्फ़िगरेशन गुण> C / C ++> सामान्य> अतिरिक्त शामिल निर्देशिकाएँ: जोड़ें C:\gtest\include
  5. कॉन्फ़िगरेशन गुण> C / C ++> कोड जनरेशन> रनटाइम लाइब्रेरी: यदि आपका कोड रनटाइम DLL से लिंक होता है, तो मल्टी-थ्रेड डीबग DLL (/ MDd) चुनें। यदि नहीं, तो मल्टी-थ्रेड डीबग (/ MTd) चुनें।
  6. कॉन्फ़िगरेशन गुण> लिंकर> सामान्य> अतिरिक्त पुस्तकालय निर्देशिकाएँ: जोड़ें C:\gtest\msvc\gtest\Debugया C:\gtest\msvc\gtest-md\Debug, gtestd.lib के स्थान पर निर्भर करता है
  7. कॉन्फ़िगरेशन गुण> लिंकर> इनपुट> अतिरिक्त निर्भरता: जोड़ें gtestd.lib

हर चीज का सत्यापन

  1. main()फ़ंक्शन वाले अपने प्रोजेक्ट प्रोजेक्ट में cpp खोलें ।
  2. निम्नलिखित कोड चिपकाएँ:

    #include "stdafx.h"  
    #include <iostream>
    
    #include "gtest/gtest.h"
    
    TEST(sample_test_case, sample_test)
    {
        EXPECT_EQ(1, 1);
    }
    
    int main(int argc, char** argv) 
    { 
        testing::InitGoogleTest(&argc, argv); 
        RUN_ALL_TESTS(); 
        std::getchar(); // keep console window open until Return keystroke
    }
    
  3. डीबग> डीबग करना प्रारंभ करें

यदि सब कुछ काम करता है, तो आपको कंसोल विंडो दिखाई देनी चाहिए और आपको इकाई परीक्षा परिणाम दिखाना चाहिए।


9
यह एक महान मार्गदर्शक था! मुझे गेंद लुढ़कने में सक्षम थी, लेकिन मैं इसमें एक और नोट जोड़ूंगा: टेस्ट प्रोजेक्ट और gtest लाइब्रेरी को एक ही कोड जनरेशन विकल्प के साथ बनाया जाना चाहिए, या तो दोनों / MDd हैं या दोनों / MTd हैं, अन्यथा होगा लिंकिंग त्रुटियों का एक गुच्छा हो।
किरिल

1
नोट: जो कोई भी माइक्रोसॉफ्ट विजुअल स्टूडियो .NET 2003 के साथ इस समान कार्यान्वयन बाहर ले जाने की कोशिश कर रहा है, गूगल टेस्ट फ्रेमवर्क स्वचालित रूप से डिफ़ॉल्ट रनटाइम लायब्रेरी में 'पुस्तकालयों एकल पिरोया डीबग डीबग मोड के लिए' और ' एकल पिरोया रिलीज मोड के लिए और के रूप में' जहाँ तक मैंने कोशिश की है, कोड जनरेशन से इसे बदलने का विकल्प उपलब्ध नहीं है। इसलिए, कृपया सुनिश्चित करें कि आप अपने प्रोजेक्ट में रनटाइम लाइब्रेरी के रूप में सिंगल-थ्रेडेड विकल्प चुनते हैं। इसके अलावा, यह सरल और संक्षिप्त ट्यूटोरियल सही काम करता है!
Neophile

यह पाँच ट्यूटोरियल में से पहला है जो काम करता है और एक बुरे अभ्यास को बढ़ावा नहीं दे रहा है। मुझे यह पसंद आएगा अगर यह परीक्षण परियोजना को मूल परियोजना से जोड़ने के महत्वपूर्ण पहलू को कवर करे ... 30+ साइटें बाद में, मुझे काम करने का उत्तर नहीं मिला है। मैंने इस पर 3 दिन बिताए हैं।
व्यक्ति

मैंने "प्रोजेक्ट गुण> कॉन्फ़िगरेशन गुण> C / C ++> रनटाइम लाइब्रेरी" में मान निकाल दिया है, फिर इसने काम किया
मनोहर रेड्डी ने


5

गाइस्ट निर्मित होने के बाद, मैंने यही किया है:

  1. सामान्य गुणों के लिए \ mypath \ gtest-1.0.1 \ Debug (या रिलीज़) जोड़ें-> लिंकर-> सामान्य-> अतिरिक्त लाइब्रेरी निर्देशिका
  2. सामान्य गुणों में gtest.lib और gtest_main.lib जोड़ें-> लिंकर-> इनपुट-> अतिरिक्त निर्भरता

उसके बाद मैं सिर्फ टेस्ट या TEST_F का उपयोग करके अपने परीक्षण उपयुक्त के रूप में लिखता हूं और उन्हें अपने मुख्य कार्य के साथ संकलित करता हूं:

int main(int argc, char** argv)
{
    testing::InitGoogleTest(&argc, argv);
    return RUN_ALL_TESTS();
}

5
मुझे बहुत सी लिंकर त्रुटियाँ मिलती हैं: पहले से ही gtest.lib में परिभाषित ... उदाहरण: 1> LIBCMT.lib (tidtable.obj): त्रुटि LNK2005: __encode_pointer पहले से ही msrtrt.lib (MSVCR80.dll) ओह, btw, I में परिभाषित है। एमएफसी कोड के लिए परीक्षण लिखने की कोशिश कर रहा हूँ।
नटखट

माफ़ करना। मुझे नहीं लगता कि मैं वहां आपकी मदद कर सकता हूं। किसी कारण से मुझे वे लिंक त्रुटियां नहीं मिली हैं। क्या आपने gtest के साथ सिर्फ हैलो वर्ल्ड टेस्ट बनाने की कोशिश की है?
15

gtest_main.libडिफ़ॉल्ट mainफ़ंक्शन होता है, इसलिए यदि आप अपना स्वयं का mainस्पष्ट रूप से लिखते हैं, तो आप इसे शामिल नहीं करना चाहते ।
ग्रू

5

यदि आप gtest_main.lib में परिभाषित मुख्य () फ़ंक्शन का उपयोग कर सकते हैं, तो आप परीक्षण के लिए अपना खुद का मुख्य () लिखना चाहते हैं, लेकिन फिर आपको VS2012 में लिंकर त्रुटियों "एंट्री पॉइंट को परिभाषित किया जाना चाहिए" मिलता है। आपके परीक्षण-प्रोजेक्ट सेट में ProjectProperties-> Linker-> System-> SubSystem को "कंसोल" के रूप में, यह VS2012 को "मुख्य ()" नामक एक एंट्री पॉइंट देखने के लिए बाध्य करेगा और इसे gtest_main.lib में उपलब्ध कराएगा (बशर्ते आप इससे जुड़े हों यह ठीक है)।


2

Microsoft Visual Studio में, गलत रनटाइम लाइब्रेरी प्रकार लिंक त्रुटियों का कारण बनता है।

वीएस 2005 (2008 और 2008) मल्टीलेथेड डीएलएल या मल्टीथ्रेड डिबग डीएलएल को डिफ़ॉल्ट रूप में उपयोग करता है। लेकिन Google टेस्ट लाइब्रेरी डिफ़ॉल्ट रूप से मूलिथ्रेड या मूलिथ्रेड डिबग रनटाइम का उपयोग करती है।

इसलिए, Google परीक्षण लाइब्रेरी के लिए उपयुक्त रन टाइम लाइब्रेरी प्रकार चुनें। (कॉन्फ़िगरेशन गुणों में -> कोड जनरेशन -> रनटाइम लाइब्रेरी)।


उपयुक्त क्रम क्या है? (एमडी या अन्य)
रामाधीर सिंह
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.