C++ ट्रैक पर टेस्टिंग

सीखिए कि Exercism पर अपने C++ अभ्यासों को कैसे टेस्ट करें।


हर अभ्यास में यूनिट टेस्ट और एक CMake बिल्ड रेसिपी होती है। इम्प्लिमेंटेशन आप लिखते हैं। हर टेस्ट फाइल आपके इम्प्लिमेंटेशन से लिंक होकर एक कंसोल एक्ज़ीक्यूटेबल बनाती है, जो टेस्ट चलाता है। टेस्ट एक्ज़ीक्यूटेबल चलाने पर हर फेल होने वाले टेस्ट के लिए संदेश छपते हैं, और टेस्ट फेल होने पर वह शून्य के अलावा कोई एग्ज़िट स्टेटस बताता है।

ध्यान दें: जब भी आप अपना प्रोजेक्ट बिल्ड करते हैं, आपका कोड टेस्ट सूट के सामने परखा जाता है। अगर आपका कोड एक या अधिक टेस्ट पास नहीं करता, लेकिन मान्य C++ कोड है, तो भी वह कंपाइल होगा।

हर अभ्यास को करने की प्रक्रिया इस तरह है:

  • CMake से शुरुआती बिल्ड बनाना
  • हर यूनिट टेस्ट के लिए:
    • टेस्ट को फेल कराने के लिए कंपाइल एरर ठीक करना।
    • टेस्ट पास कराने के लिए बस उतना ही लिखना जितना ज़रूरी हो।
    • पढ़ने में आसान बनाने, दोहराव कम करने आदि के लिए अपने इम्प्लिमेंटेशन को रीफैक्टर करना।
    • अगले टेस्ट का कमेंट हटाना।

CMake से शुरुआती बिल्ड बनाना

हर अभ्यास के साथ यूनिट टेस्ट के साथ-साथ एक CMakeLists.txt फाइल भी आती है। इसमें तैयार CMake रेसिपी होती है, जो आपके लिए बिल्ड संभालती है। आम तौर पर आपको इस फाइल को बदलने की ज़रूरत नहीं पड़ेगी। दी गई रेसिपी यह मानकर चलती है कि आपका इम्प्लिमेंटेशन अभ्यास के नाम वाली एक हेडर फाइल और एक सोर्स फाइल के रूप में मौजूद है।

उदाहरण के लिए, bob अभ्यास को bob.h और bob.cpp में इम्प्लिमेंटेशन चाहिए। जिन अभ्यासों के नाम में डैश होते हैं, उनकी सोर्स फाइलों में अंडरस्कोर माना जाता है, इसलिए word-count को word_count.h और word_count.cpp चाहिए। आप तय कर सकते हैं कि आपका इम्प्लिमेंटेशन इतना आसान है कि वह पूरी तरह हेडर में ही रह सकता है; ऐसी स्थिति में आप cpp फाइल छोड़ सकते हैं।

CMake चलाने से पहले अपनी शुरुआती इम्प्लिमेंटेशन फाइलें बना लीजिए। अगर bob अभ्यास के लिए CMake चलाते समय आपके पास bob.h और bob.cpp फाइलें नहीं हैं, तो CMake फाइलें न मिलने की एरर देगा। ये फाइलें खाली हो सकती हैं, लेकिन उनका होना ज़रूरी है।

इस रेसिपी की मदद से CMake आपके वातावरण के लिए उपयुक्त प्रोजेक्ट बना सकता है: इसके लिए उपयुक्त जेनरेटर और अभ्यास की डायरेक्टरी की जगह के साथ cmake -G चलाइए। CMake आपके ऑपरेटिंग सिस्टम के लिए उपयुक्त बिल्ड स्क्रिप्ट बनाएगा। इन बनी फाइलों को अभ्यास के सोर्स कोड से अलग रखने के लिए आम तौर पर build नाम की एक डायरेक्टरी बनाई जाती है, जिसमें ये बनी हुई बिल्ड फाइलें और कंपाइल किया गया कोड रखा जाता है। इससे आपका अभ्यास फोल्डर साफ-सुथरा बना रहता है।

CMake से बिल्ड वातावरण बन जाने के बाद, आप अपने वातावरण के लिए उपयुक्त कमांड से अपना कोड बिल्ड कर सकते हैं:

  • Linux में make के साथ: make
  • Windows में Visual Studio के साथ: मेन्यू से Build / Build Solution चुनिए।
  • MacOS में Xcode के साथ: टूलबार से Build चुनिए।
  • MacOS में "Unix Makefile" के साथ: make अगर exercism CLI ऐप इस्तेमाल कर रहे हैं

नीचे अलग-अलग वातावरणों के लिए CMake चलाने के उदाहरण दिए गए हैं।

Linux में Make के साथ

CMake के लिए जेनरेटर का नाम Unix Makefiles है। मान लीजिए कि मौजूदा अभ्यास bob है और हम अभ्यास फोल्डर में हैं:

$ touch bob.{h,cpp}
$ mkdir build
$ cd build
$ cmake -G "Unix Makefiles" ..
$ make

यह उदाहरण दिखाता है कि CMake चलाने से पहले इम्प्लिमेंटेशन के लिए खाली फाइलें कैसे बनाई जाती हैं।

टेस्ट कंपाइल करने के लिए बिल्ड डायरेक्टरी में बस make टाइप कीजिए। इससे कंपाइल-टाइम एरर आने चाहिए। एरर ठीक हो जाने के बाद make टेस्ट बिल्ड और रन करेगा।

Windows में Visual Studio के साथ

Visual Studio में CMake प्रोजेक्ट के लिए अंदरूनी सपोर्ट है, इसलिए आपको CMake अलग से इंस्टॉल करने या Visual Studio के बाहर चलाने की ज़रूरत नहीं पड़ेगी। Visual Studio में CMake प्रोजेक्ट सेट अप करने के लिए इस गाइड को देखिए।

MacOS में Xcode के साथ

CMake के लिए जेनरेटर का नाम Xcode है। मान लीजिए कि मौजूदा अभ्यास bob है और हम अभ्यास फोल्डर में हैं:

$ touch bob.{h,cpp}
$ mkdir build
$ cd build
$ cmake -G Xcode ..

यह उदाहरण XCode फाइलें बनाता है, ताकि आप प्रोजेक्ट XCode में खोल सकें। XCode में प्रोजेक्ट खुलने के बाद आपको एक और टारगेट जोड़ना पड़ सकता है। नया टारगेट बनाने के लिए मेन्यू से File -> New -> Target पर जाइए, भाषा के रूप में OS X \ Application \ Command Line Tool -> Next C++ चुनिए और टारगेट का नाम दीजिए। उस टारगेट से कोड चलाइए।

अगर आपका टर्मिनल Xcode x.x not supported एरर दिखाता है, तो बहुत संभव है कि आपकी मशीन पर Xcode इंस्टॉल नहीं है या आपका वर्ज़न पुराना हो गया है। कृपया App Store से या इस लिंक से Xcode डाउनलोड और इंस्टॉल कीजिए। The CXX compiler identification is unknown जैसी एरर आम तौर पर GCC इंस्टॉल करने के निर्देशों का पालन करने से, या ऊपर दिए गए पैराग्राफ के अनुसार Xcode में एक और टारगेट जोड़ने से ठीक हो जाती हैं।

MacOS में Make के साथ जब Exercism CLI इस्तेमाल कर रहे हों

यह उदाहरण खास तौर पर उन लोगों की मदद करता है जो अपने C++ अभ्यासों को कॉन्फिगर करने, टेस्ट करने और सबमिट करने के लिए Exercism CLI ऐप इस्तेमाल करना चाहते हैं।

CMake के लिए जेनरेटर का नाम Unix Makefiles है। मान लीजिए कि मौजूदा अभ्यास bob है और हम अभ्यास फोल्डर में हैं:

$ touch bob.{h,cpp}
$ cmake -G "Unix Makefiles" .
$ exercism test

इस उदाहरण में हम CMake चलाने से पहले इम्प्लिमेंटेशन के लिए खाली फाइलें बनाते हैं, लेकिन खाली बिल्ड डायरेक्टरी नहीं बनाते। इसका कारण यह है कि Exercism CLI टेस्ट केस पढ़ने के लिए रूट डायरेक्टरी की .exercism/metadata.json फाइल इस्तेमाल करता है।

टेस्ट कंपाइल करने के लिए रूट डायरेक्टरी में बस exercism test टाइप कीजिए। इससे कंपाइल-टाइम एरर आने चाहिए। एरर ठीक हो जाने के बाद, दोबारा exercism test चलाने पर Exercism CLI की मदद से टेस्ट बिल्ड और एक्ज़ीक्यूट होंगे।