YAMLScript ট্র্যাকে টেস্ট করা

Exercism-এ আপনার YAMLScript অনুশীলনীগুলো কীভাবে টেস্ট করবেন, তা শিখুন।


YAMLScript-এ লেখা Exercism অনুশীলনীর সমাধান টেস্ট করা অত্যন্ত সহজ। চালাতেও সহজ, বুঝতেও সহজ।

আপনাকে শুধু অনুশীলনীর ডিরেক্টরিতে make test রান করতে হবে।

প্রথমবার make test রান করলে সব টেস্ট ফেল করবে, কারণ টেস্টগুলো সমাধান করার কোনো কোড আপনি তখনো লেখেননি।

সাধারণত অনুশীলনী সমাধানের কাজ শুরু হয় make test দিয়ে, তারপর একবারে একটি টেস্টে মনোযোগ দিয়ে সেটি পাস করার কোড লেখা হয়। সব টেস্ট পাস হয়ে গেলেই আপনার কাজ শেষ!

বোনাস: make test রান করলে এটিও নিশ্চিত হয় যে ys YAMLScript ইন্টারপ্রেটারের সঠিক ভার্সনটি (চলতি অনুশীলনীর জন্য যেটি দরকার) সঠিক জায়গায় (/path/to/exercism/yamlscript/.local/-এ) ইনস্টল করা আছে। তার মানে শুরু করার জন্য আপনাকে আগে থেকে ys ইনস্টল করতে হবে না!

অনুশীলনীর ডিরেক্টরির বিন্যাস

আপনি যদি the-great-exercise নামের একটি অনুশীলনী নিয়ে কাজ করেন, তাহলে exercism download --exercise=the-great-exercise --track=yamlscript কমান্ডটি /path/to/exercism/yamlscript/the-great-exercise ডিরেক্টরিটি তৈরি করবে।

এই ডিরেক্টরির ভেতরে টেস্ট ফাইলের নাম হবে the-great-exercise-test.ys এবং সমাধান প্রোগ্রাম ফাইলের নাম হবে the-great-exercise.ys। এছাড়া অনুশীলনীর বিবরণ দেওয়া একটি README.md ফাইল এবং আটকে গেলে কাজে লাগবে এমন তথ্য দেওয়া একটি HELP.md ফাইলও থাকবে।

make-এর জন্য দুটি ফাইল থাকবে: Makefile এবং GNUmakefile। এটি করা হয়েছে (কোনো শ্লেষ নয়) যাতে আপনি টেস্ট চালাতে GNU make ব্যবহার করেন, আপনার সিস্টেমে ইনস্টল থাকা অন্য কোনো make কমান্ড নয়। আসল ফাইলটি হলো GNUmakefile, আর GNU make সবসময় Makefile-এর বদলে এটিকেই বেছে নেয়। অন্য make কমান্ডগুলো Makefile ব্যবহার করবে, যেটি GNU make ব্যবহার করার বার্তা দিয়ে এরর দেখাবে!

একটি টেস্ট ফাইলের গঠন

YAMLScript-এর টেস্ট লেখা হয় YAMLScript-এ, সেটা বলাই বাহুল্য! YAMLScript যেহেতু YAML, আর YAML যেহেতু ডেটা, তাই টেস্টগুলো মূলত ডেটাই।

এখানে একটি সাধারণ টেস্ট ফাইলের উদাহরণ দেখা যাচ্ছে। এটি আসলে acronym অনুশীলনীর প্রথম ৩টি টেস্ট। :-)

#!/usr/bin/env ys-0

use ys::taptest: :all
load: 'acronym.ys'

test::
- name: Basic
  code: abbreviate('Portable Network Graphics')
  want: PNG

- name: Lowercase words
  code: abbreviate('Ruby on Rails')
  want: ROR

- name: Punctuation
  code: abbreviate('First In, First Out')
  want: FIFO

done: 3

প্রথম লাইনটি একটি shebang লাইন, যেটি prove কমান্ডকে (যেটি Makefile চালায়) বলে দেয় টেস্ট চালানোর জন্য perl-এর বদলে YAMLScript-এর ys ইন্টারপ্রেটার ব্যবহার করতে, কারণ prove-এর ডিফল্ট হলো perl।

দ্বিতীয় লাইনটি একটি use স্টেটমেন্ট, যেটি YAMLScript-এর ys::taptest TAP টেস্টিং লাইব্রেরি লোড করে।

নোট: TAP হলো টেস্ট স্ক্রিপ্ট আর টেস্ট হারনেসের মধ্যে একটি সহজ টেক্সট-ভিত্তিক ইন্টারফেস, আর prove হলো Perl-এ TAP টেস্ট চালানোর স্ট্যান্ডার্ড হারনেস। Perl যেহেতু সব জায়গায় পাওয়া যায়, তাই অনেক ভাষার (YAMLScript-সহ) টেস্ট স্যুটের জন্য TAP আর prove ব্যবহার করা শেষ পর্যন্ত খুব ভালো একটি পছন্দ হয়ে দাঁড়ায়।

use স্টেটমেন্টটি acronym.ys সমাধান প্রোগ্রামটি লোড করে, যেটির টেস্ট করা হচ্ছে এই ফাইলে।

আমাদের সব টেস্টই test কী (key)-এর নিচে একটি YAML সিকোয়েন্সে থাকে।

শেষ লাইন done: বাধ্যতামূলক, আর এটি টেস্ট হারনেসকে জানায় যে সব টেস্ট সত্যিই রান হয়েছে। সংখ্যাটি (যা ঐচ্ছিক) হলো আমরা যতগুলো টেস্ট রান হওয়ার আশা করেছিলাম তার সংখ্যা।

test কী (key)-এর নিচের প্রতিটি টেস্ট হলো একটি ম্যাপিং, যেখানে এই কী (key)/ভ্যালু জোড়াগুলো থাকে:

  • name: - টেস্টের লেবেল, যা prove -v প্রিন্ট করে।
  • code: - রান করার YAMLScript কোড। এই কোডটি আমাদের যে সমাধান প্রোগ্রাম নিয়ে কাজ করছি তার কোনো ফাংশন কল করবে।
  • what: - যে টেস্টগুলোতে এরর হওয়ার কথা, সেগুলোতে মানটি হয় error। সাধারণ টেস্টে এই জোড়াটি থাকে না।
  • want: - টেস্টের প্রত্যাশিত ফলাফল। এটি একটি YAML মান, এবং স্ট্রিং, সংখ্যা, বুলিয়ান, সিকোয়েন্স বা ম্যাপ হতে পারে। what: যদি error হয়, তাহলে এই মানটি হলো প্রত্যাশিত এরর বার্তা।
  • SKIP: - টেস্টটি রান বাদ দিতে এটি true করুন।
  • ONLY: - শুধু ওই টেস্টটি রান করতে এটি true করুন। একাধিক ONLY: টেস্ট থাকলে সেগুলোর প্রত্যেকটি রান হবে।

Exercism অনুশীলনীর জন্য YAMLScript-এ টেস্ট ড্রিভেন ডেভেলপমেন্ট করতে আপনার যা জানা দরকার, এটুকুই যথেষ্ট!

ys::taptest লাইব্রেরিতে আরও কিছু ফিচার আছে, যা দিয়ে আপনি আরও জটিল টেস্ট লিখতে পারেন, তবে Exercism-এর টেস্টগুলো আপনার জন্য আগেই লেখা হয়ে গেছে। ys::taptest লাইব্রেরি সম্পর্কে আরও জানতে ডকুমেন্টেশন দেখুন।