Bnlang টেস্ট ফ্রেমওয়ার্ক আবিষ্কার

Bnlang এর স্ট্যান্ডার্ড লাইব্রেরিতে একটি ছোট টেস্ট ফ্রেমওয়ার্ক আছে — test। এটি আপনাকে দেয় test(name, fn) টেস্ট রেজিস্টার করার জন্য, কিছু অ্যাসারশন হেল্পার, এবং run() যা সবকিছু এক্সিকিউট করে এবং ব্যর্থতার ক্ষেত্রে non-zero দিয়ে এক্সিট করে।

আলাদা কোনো টেস্ট-ডিসকভারি বাইনারি নেই। একটি টেস্ট ফাইল একটি সাধারণ Bnlang স্ক্রিপ্টই — যা test ইমপোর্ট করে, কেস রেজিস্টার করে, এবং t.run() কল করে।


A Minimal Test File

// file: tests/math_spec.bnl
import "test" as t;

t.test("addition", function () {
    t.equal(2 + 2, 4);
});

t.test("upper case", function () {
    t.equal("foo".to_upper(), "FOO");
});

t.run();

Available Assertions

ফ্রেমওয়ার্ক তার surface ছোট রাখে। প্রতিটি অ্যাসারশন ব্যর্থ হলে থ্রো করে; run() ধরে এবং রিপোর্ট করে।

  • t.equal(actual, expected) — value compare.
  • t.not_equal(actual, expected) — opposite of equal.
  • t.is_true(v) / t.is_false(v) — boolean checks.
  • t.is_null(v) / t.not_null(v) — null checks.
  • t.contains(haystack, needle) — substring (for strings) or membership (for lists).
  • t.throws(fn) — assert that fn() throws.
  • t.throws_with(fn, substring) — like throws, but also checks the message.

Running a Test File

শুধু bnl দিয়ে ফাইলটি চালান। t.run() stdout-এ একটি সারমর্ম প্রিন্ট করে, এবং কোনো ব্যর্থতায় প্রসেসকে কোড 1-এ এক্সিট করায় — তাই CI স্বয়ংক্রিয়ভাবে এটি ধরে নেয়।

bnl tests/math_spec.bnl

Best Practices

  • প্রতিটি test() কে একটি একক বিহেভিয়রে ফোকাস রাখুন — নামটি অ্যাসারশনকে বর্ণনা করবে।
  • সম্পর্কিত টেস্ট ফাইল একটি tests/ ডিরেক্টরিতে গ্রুপ করুন। কোনো ম্যাজিক ডিসকভারি নেই, কিন্তু এটি শেল গ্লব (bnl tests/*.bnl)-কে সরল করে।
  • এরর মেসেজ-এ অ্যাসার্ট করতে t.throws_with ব্যবহার করুন — এটি এমন রিগ্রেশন ধরে যেখানে সঠিক এক্সেপশন ভুল কারণে ফায়ার হয়।