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 ofequal.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 thatfn()throws.t.throws_with(fn, substring)— likethrows, 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ব্যবহার করুন — এটি এমন রিগ্রেশন ধরে যেখানে সঠিক এক্সেপশন ভুল কারণে ফায়ার হয়।