Bnlang টেস্ট ফ্রেমওয়ার্ক ব্যবহার
Bnlang-এ একটি টেস্ট ফাইল একটি সাধারণ স্ক্রিপ্টই। আপনি test ইমপোর্ট করেন, t.test(name, fn) দিয়ে কিছু কেস রেজিস্টার করেন, এবং t.run() দিয়ে শেষ করেন। এই পেজ ব্যবহারিক অংশ কাভার করে — টেস্ট কীভাবে অর্গানাইজ করবেন, কীভাবে চালাবেন, এবং কীভাবে CI-তে ওয়্যার করবেন।
Running One Test File
bnl tests/math_spec.bnl
t.run() একটি সারমর্ম প্রিন্ট করে, এবং কোনো টেস্ট ব্যর্থ হলে কোড 1-এ এক্সিট করে — CI-এর জন্য এটাই একমাত্র সিগনাল।
Running a Whole Folder
কোনো বিল্ট-ইন গ্লব নেই, কিন্তু আপনার শেলে একটি আছে। প্রতিটি spec ফাইল চালান:
# POSIX shells
for f in tests/*.bnl; do bnl "$f" || exit 1; done
# PowerShell
foreach ($f in Get-ChildItem tests\*.bnl) { bnl $f.FullName; if ($LASTEXITCODE) { exit $LASTEXITCODE } }
Layout Conventions
একটি সাধারণ প্রজেক্ট টেস্টগুলো সেই কোডের পাশে রাখে, যা টেস্ট করছে:
my-app/
bnl.json
bnl.lock
src/
parser.bnl
formatter.bnl
tests/
parser_spec.bnl
formatter_spec.bnl
A Multi-Case Spec
// file: tests/parser_spec.bnl
import "test" as t;
import "parser" as parser;
t.test("parses integers", function () {
t.equal(parser.parse("42"), 42);
});
t.test("parses negatives", function () {
t.equal(parser.parse("-3"), -3);
});
t.test("rejects garbage", function () {
t.throws_with(function () { parser.parse("not a number"); }, "expected number");
});
t.run();
CI Integration
যেহেতু প্রতিটি টেস্ট ফাইল সফল হলে 0 দিয়ে এবং যেকোনো ব্যর্থতায় 1 দিয়ে এক্সিট করে, CI-এ প্লাগ ইন করা সহজ। GitHub Actions উদাহরণ স্টেপ:
- name: Run Bnlang tests
shell: bash
run: |
for f in tests/*.bnl; do
bnl "$f" || exit 1
done
Best Practices
- টেস্ট ফাইল ছোট ও ফোকাস্ড রাখুন। একটি বিষয়, একটি স্পেক ফাইল।
- টেস্ট নাম বিহেভিয়র বর্ণনা করুক —
"parses negatives""test 3"এর চেয়ে ভালো। - কোন এরর আপনি আশা করছেন সেটা পিন করতে
t.throws_withব্যবহার করুন; খালিt.throwsযেকোনো থ্রো গ্রহণ করে এবং বাগ লুকাতে পারে। - প্রতিটি কমিটে টেস্ট চালান। যত আগে রিগ্রেশন ধরা পড়ে, ঠিক করতে তত কম খরচ।