2011-08-31 15 views
18

मैं सीएमके में नया हूं और मैं Google टेस्ट फ्रेमवर्क का उपयोग कर रहा हूं। मैंने सीएमके और Google परीक्षण ढांचे के संयोजन के अधिक जटिल उदाहरणों की तलाश की है, लेकिन मैंने बहुत भाग्य नहीं लिया है। मैं उम्मीद कर रहा था कि कोई उस सेटअप पर अपनी राय दे सकता है जिस पर मैं पहुंचा हूं और मेरे लिए एक प्रश्न का उत्तर दे रहा हूं। यहाँ बुनियादी परियोजना संरचना है:यूनिट टेस्ट आउटपुट और परियोजना संरचना सलाह --- सीएमके + Google टेस्ट फ्रेमवर्क

ProjectFolder
-CMakeLists.txt
/निर्माण
/शामिल
    निर्माण सभी मेरी ज फ़ाइलें
/src
    -CMakeLists.txt
   - मेरी मेरी .cpp फ़ाइलें
/परीक्षण
    -CMakeLists.txt
   /gtest
        -Google के CMakeLists.txt
   /उपहास
        -CMakeLists.txt
        -cpp और ज मोजे के लिए फ़ाइलें

संक्षेप में रूट cmake फ़ाइल subdirectories के रूप में src और परीक्षण जोड़ती है। Src cmake फ़ाइल cpp फ़ाइलों को लाइब्रेरी में globs। परीक्षण सेमेक फ़ाइल उपनिर्देशिका के रूप में mocks और gtest जोड़ता है। नकली cmake फ़ाइल अपनी सभी सीपीपी फ़ाइलों को दूसरी पुस्तकालय में globs। अंत में परीक्षण फ़ोल्डर में cmake फ़ाइल स्रोत पुस्तकालय, गूगल पुस्तकालय, और यूनिट परीक्षण निष्पादन योग्य के साथ mocks पुस्तकालयों को जोड़ता है।

मैं अंत में क्या मिलता कई निष्पादनयोग्य हैं: objA_unittest, objB_unittest, आदि

कुछ बातें:

  1. इस सब का निर्माण और अभी भी निर्माण में मैं सीडी काफी साफ अपने प्रोजेक्ट निर्देशिका रखने के लिए फ़ोल्डर और "cmake .." चलाएं। यह वास्तव में अच्छी तरह से काम करता प्रतीत होता है और मैं हमेशा इस फ़ोल्डर से बाहर निकलने के लिए vim को कॉन्फ़िगर करने की योजना बना रहा था। क्या किसी के पास कोई दृष्टिकोण है या इस दृष्टिकोण के साथ कोई समस्या है?

  2. मुझे अपने प्रोजेक्ट फ़ोल्डर में Google लाइब्रेरी घोंसला करने के विचार का शौक नहीं है (विशेष रूप से यदि मेरे पास अंततः कई परियोजनाएं हैं जो इसका उपयोग करती हैं), लेकिन ऐसा लगता है कि आप अत्यधिक अनुशंसा नहीं करते हैं गूगल लाइब्रेरीज़ मैं इसके चारों ओर कोई रास्ता नहीं देख सकता। हालांकि, अगर किसी को बेहतर तरीके से पता है, तो मुझे यह सुनना अच्छा लगेगा।

  3. परीक्षण चलाना। मुझे यह पसंद है कि मुझे बस इतना करना है कि सीटीएस्ट के साथ मेरे सभी यूनिट परीक्षणों को निष्पादित करने के लिए "टेस्ट टेस्ट" चलाएं। हालांकि, मुझे पता चला है कि मुझे आउटपुट बहुत पसंद नहीं है। प्रत्येक यूनिट परीक्षण निष्पादन योग्य में कई अलग-अलग यूनिट परीक्षण होते हैं। इन्हें सीधे चलाने से Google की बहुत वर्बोज़ प्रतिक्रिया मिलती है। यदि निष्पादन योग्य में से एक परीक्षण विफल रहता है तो मुझे पता है कि वास्तव में कौन सा परीक्षण विफल रहता है और क्यों। पहले, मैंने मेकफ़ाइल का उपयोग किया और मेकफ़ाइल के अंत में मैंने बस सभी परीक्षण निष्पादित किए। मैंने पहले सेमीकेक में कस्टम बिल्ड लक्ष्य बनाकर इसे ठीक करने का प्रयास किया।हालांकि, यह केवल पहले कमांड निष्पादित करता है। मुझे या तो सीटीएस्ट से अधिक वर्बोज आउटपुट प्राप्त करने का एक तरीका चाहिए या मुझे प्रत्येक यूनिट परीक्षण निष्पादन योग्य निष्पादित करने के लिए स्वचालित रूप से बैश स्क्रिप्ट या सीएमके के समान कुछ आउटपुट करने का एक तरीका चाहिए। दूसरे शब्दों में, मेरे पास अब cmake फ़ाइल स्थापित है इसलिए मुझे निष्पादन योग्य उत्पन्न करने के लिए केवल एक ही इकाई में यूनिट परीक्षण जोड़ना होगा, और अगर मैं इससे बच सकता हूं तो मैं इसे दूसरे स्थान पर जोड़ना नहीं चाहता यह। क्या किसी के पास कोई अनुभव है जो इस बिंदु में सहायक होगा?

बहुत पहले से धन्यवाद।

उत्तर

11
  1. यह वास्तव में एक सिफारिश cmake अभ्यास out-of-source build
  2. बुलाया AFAIK यह प्रणाली में googletest पुस्तकालयों कंपाइल स्थापित करने के लिए अनुशंसित नहीं है है। इसलिए यदि आप अपने प्रोजेक्ट बिल्ड के हिस्से के रूप में इसे साझा या स्थिर लाइब्रेरी के रूप में संकलित करते हैं तो कोई समस्या नहीं होनी चाहिए। मैंने विंडोज़, लिनक्स, ओएसएक्स और एंड्रॉइड पर बिना किसी समस्या के googletest 1.6.0 का उपयोग किया है।
  3. मुझे सीटीएस्ट के बारे में निश्चित नहीं है लेकिन कस्टम लक्ष्य निश्चित रूप से आपके लिए सभी परीक्षण चलाने में सक्षम है।

जोड़ें निम्नलिखित अपने शीर्ष स्तर CMakeLists.txt में लाइनें (किसी भी परीक्षण जोड़ने से पहले):

add_custom_target(test) 
macro(run_test test_target) 
    add_custom_target(${test_target}_runtest 
     COMMAND ${test_target} #cmake 2.6 required 
     DEPENDS ${test_target} 
     WORKING_DIRECTORY "${CMAKE_BINARY_DIR}") 
    add_dependencies(test ${test_target}_runtest) 
endmacro() 

के लिए अपने परीक्षण संलग्न करने के लिए एक लाइन को जोड़ने के प्रत्येक परीक्षा के लिए अगला यहाँ एक छोटी समाधान मेरा सुझाव कर सकते हैं test लक्ष्य:

#add_executable(mytest ${mysources}) 
run_test(mytest) 
+3

सावधान रहें: पहले से ही 'परीक्षण' नामक एक पूर्व परिभाषित सीएमके लक्ष्य है। उसी नाम के साथ एक कस्टम लक्ष्य जोड़ना आम तौर पर अनुशंसित नहीं है। आप उसी निर्देशिका में "ctest -V" या "ctest -VV" भी कॉल कर सकते हैं जहां आप अब "परीक्षण करें" कह रहे हैं, और यह पूर्ण परीक्षण सूट * चलाएगा * और * आपको सभी परीक्षणों का आउटपुट दिखाएगा। (-V == verbose, -VV == बहुत verbose) – DLRdave

+0

बस FYI, मैं वास्तव में तीव्र प्रतिक्रिया (और नीचे वाला एक भी) की सराहना करता हूं। मैं बस स्कूल में व्यस्त रहा हूं और इनमें से किसी एक का परीक्षण करने का समय नहीं है। जैसे ही मैं करता हूं मैं उचित उत्तर का चयन करूंगा। बस आपको बताना चाहता था कि मैं नहीं भूल गया था। :) – Landon

11

यहाँ मेरी example। मैंने इसे अपनी देव टीम के लिए लघु दिशानिर्देश के रूप में बनाया है। शायद आप इसे भी उपयोगी पाएंगे।

+0

मुझे यह पसंद है कि यह उदाहरण सरल है। हालांकि, gtest टीम से वर्तमान मार्गदर्शन पैकेज के साथ gtest स्रोत शामिल करना है। इसके आसपास करने के किसी भी उदाहरण? –

+0

हां। मुझे इस बदलाव के बारे में पता है। इसे और जल्द ही जांच लेंगे और तदनुसार इसे अपडेट करेंगे। –

+0

@ कुर्टस्चहरर मैंने नए तरीके को लागू करना शुरू कर दिया है और अंततः यहां समाधान ढूंढ लिया है http://stackoverflow.com/questions/9689183/cmake-googletest। उपर्युक्त उत्तर में सुझाए गए अनुसार अपडेट किया जाएगा। –

संबंधित मुद्दे