Minitest কী?
Minitest হল একটি রুবি টেস্টিং লাইব্রেরি, যা আপনাকে TDD শৈলিতে আপনার কোডের জন্য টেস্ট লিখতে দেয়।
এটি রেলসের ডিফল্ট টেস্টিং ফ্রেমওয়ার্ক এবং DHH-এর পছন্দের একটি।
অনেকেই এর সাদگی এবং এর প্রধান বিকল্প (RSpec) তুলনায় কম কোড থাকায় এটিকে পছন্দ করেন।
নিচের ছবিতে দেখুন:

এই পোস্টটি এই সম্পর্কে নয় যে আপনি কোনটি বেছে নেবেন বা কোনটি 'বेहতর'।
এই পোস্টটি Minitest কীভাবে কাজ করে সে সম্পর্কে।
যদি আপনি জানতে চান: শুধু যেটি আপনাকে ভালো লাগে সেটি ব্যবহার করুন, কিন্তু আপনাকে উভয়টির সাথে পরিচিত হওয়া উচিত 🙂
যদি আপনি জিনিসগুলি কীভাবে কাজ করে সেটি শিখতে পছন্দ করেন তবে আপনি এই পোস্টটি উপভোগ করবেন…
আপনার প্রিয় টেস্টিং লাইব্রেরি যেকোনো একটিই হোক!
হুডের নিচে একটি নজর দিই
একটি জিনিস যা লোকেরা (আমিও সহ) পরামর্শ দেন তা হল সোর্স কোড পড়া কারণ এটি শিখতে একটি দুর্দান্ত উপায় যে জিনিসগুলি কীভাবে কাজ করে এবং এছাড়া এটি কিছু নতুন রুবি ট্রিক শিখতে একটি দুর্দান্ত উপায় যা আপনি আগে দেখেননি।
Minitest-এ আমি ঠিক একই কাজ করেছি এবং আমি যা শিখলাম তা আপনাদের সাথে শেয়ার করব।
আসলে কিছু টেস্ট কোড থেকে শুরু করি যাতে আমরা আলোচনা করতে পারি এটি কীভাবে Minitest-এর কাজের সাথে সম্পর্কিত।
class Thingy < Minitest::Test
def test_it_works
assert_equal 1, 1
end
end
তাহলে Minitest কীভাবে এই টেস্ট মেথডগুলো (যেমন test_it_works) খুঁজে বের করে এবং রান করে?
উত্তরটি হল মেটাপ্রোগ্রামিং 'জাদুর' একটু:
def self.methods_matching(re)
public_instance_methods(true).grep(re).map(&:to_s)
end
এটি Runnable ক্লাস থেকে এসেছে যা lib/minitest.rb-এ সংজ্ঞায়িত। এই কোডটি বর্তমান ক্লাসের সমস্ত ইনস্ট্যান্স মেথড খুঁজে বের করে এবং যেগুলো রেগুলার এক্সপ্রেশনের সাথে মিলে তা নির্বাচন করে।
সুতরাং, যদি আপনি methods_matching(/^test_/) কল করেন তবে আপনি test_ দিয়ে শুরু হওয়া সমস্ত মেথড নামের একটি অ্যারে পাবেন।
Minitest কীভাবে কাজ করে
Minitest এই test_ মেথডগুলো খুঁজে বের করে, তারপর সেগুলোকে কল করে।
এটি হয় lib/minitest/test.rb ফাইলে (বিশেষত runnable_methods মেথডে, যা র্যান্ডম অর্ডারে মেথডের তালিকাও রিটার্ন করে)।
গুরুত্বপূর্ণ পয়েন্ট:
এটি কাজ করে কারণ Minitest::Test হল Runnable এর একটি সাবক্লাস।
পাজলের চূড়ান্ত টুকরো হল Runnable-এ run ক্লাস মেথড, যা কিছু অতিরিক্ত ফিল্টারিং করে এবং তারপর প্রতিটি মেথডের নাম এবং একটি রিপোর্টার অবজেক্টের সাথে run_one_method কল করে।
এখানে কোডটি:
filtered_methods.each do |method_name|
run_one_method self, method_name, reporter
end
এবং এটি Minitest::Test-এ run ইনস্ট্যান্স মেথডকে কল করে শেষ হয়:
capture_exceptions do
before_setup; setup; after_setup
self.send self.name
end
send হল একটি মেটাপ্রোগ্রামিং মেথড যা আপনাকে স্ট্রিং বা সিম্বল ব্যবহার করে যেকোনো অবজেক্টে অন্য একটি মেথড কল করতে দেয়।
capture_exceptions ব্লকটি আপনার কোড দ্বারা উত্থাপিত টেস্ট ব্যর্থতা এবং এক্সেপশন রেকর্ড করতে ব্যবহৃত হয়।
def capture_exceptions # :nodoc:
yield
rescue *PASSTHROUGH_EXCEPTIONS
raise
rescue Assertion => e
self.failures << e
rescue Exception => e
self.failures << UnexpectedError.new(e)
end
আমি কোড পড়তে এইভাবে পছন্দ করি, আপনি যে কোড পড়ছেন সেটি থেকে একটি দিক বা ফিচার ফোকাস করুন এবং তারপর পেঁয়াজের স্তরগুলোর মত স্তর दर স্তর খুলতে থাকুন।
যদি আপনি কিছু বুঝতে না পারেন, যেমন এই yield কীওয়ার্ড, তাহলে সেটি খুঁজে বের করুন।
এটি শেখার প্রক্রিয়ার অংশ!
উপসংহার
এই পোস্টে আপনি শিখেছেন Minitest কীভাবে মেটাপ্রোগ্রামিং ব্যবহার করে আপনার টেস্ট মেথডগুলো খুঁজে বের করে এবং সেগুলো কল করে। আপনি এছাড়া শিখেছেন কীভাবে টেস্ট এরর এবং এক্সেপশনগুলো রিপোর্টিংয়ের জন্য একটি অ্যারে-এ ক্যাপচার হয়।
আপনি কি এই ধরনের "কোড বিশ্লেষণ" আর্টিকেল পছন্দ করেন?
কমেন্টসে জানান 🙂
এছাড়া আপনার প্রিয় সোশ্যাল নেটওয়ার্কে এটি শেয়ার করা ভুলবেন না এবং যদি আপনি ইতিমধ্যে ৭০০০+ রুবি ডেভেলপারের মত 뉴জলেটারে সাবস্ক্রাইব না থাকেন তবে নিচের ফর্ম থেকে সাবস্ক্রাইব করুন যারা তাদের দক্ষতা উন্নত করতে চান!