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 -G রান করলে CMake আপনার পরিবেশের জন্য উপযুক্ত একটি প্রজেক্ট তৈরি করতে পারে। 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 দিয়ে টেস্টগুলো বিল্ড ও এক্সিকিউট হবে।