Elixir: ExUnit ফ্রেমওয়ার্ক ব্যবহার করে Unit Testing, Test Cases এবং Test Suites তৈরি
Elixir তে ExUnit একটি অন্তর্নিহিত টেস্টিং ফ্রেমওয়ার্ক যা ইউনিট টেস্টিং (unit testing) করতে ব্যবহৃত হয়। ExUnit এর মাধ্যমে আপনি সহজেই টেস্ট কেস (test cases) এবং টেস্ট সুইট (test suites) তৈরি করতে পারেন যা কোডের ভ্যালিডিটি এবং কার্যকারিতা যাচাই করতে সাহায্য করে।
1. ExUnit ফ্রেমওয়ার্ক ব্যবহার করে Unit Testing
ExUnit এর মাধ্যমে আপনি Elixir কোডের ছোট ছোট অংশ (functions, modules) পরীক্ষা করতে পারেন। এর মাধ্যমে assertions তৈরি করে যাচাই করা হয় যে, আপনার কোড সঠিকভাবে কাজ করছে কিনা। ExUnit ডিফল্টভাবে Elixir তে টেস্টিং ফ্রেমওয়ার্ক হিসেবে আসে, এবং এর সাথে কিছু বিশেষ টুলস যেমন assert এবং refute থাকে।
ExUnit এর ইনিশিয়াল সেটআপ:
ExUnit ব্যবহারের জন্য প্রথমে আপনাকে use ExUnit.Case দিয়ে একটি মডিউল তৈরি করতে হবে এবং সেই মডিউলের মধ্যে টেস্টগুলি লিখতে হবে।
# টেস্ট মডিউল তৈরি করা
defmodule MyTest do
use ExUnit.Case
test "basic addition" do
assert 1 + 1 == 2 # assert ব্যবহৃত হয়েছে টেস্টের জন্য
end
endএখানে, assert টেস্টটি নিশ্চিত করে যে, 1 + 1 এর ফলাফল 2 এর সমান কিনা। ExUnit একে test ব্লক হিসেবে শনাক্ত করবে এবং ফলাফল দেখাবে।
2. Test Cases তৈরি
Test Case হল একটি ছোট কোড ব্লক যা কোনো নির্দিষ্ট ফাংশন বা লজিক পরীক্ষা করে। Elixir তে ExUnit ব্যবহার করে test cases তৈরি করা হয় এবং সাধারণত test ব্লক ব্যবহার করে এগুলিকে ডিফাইন করা হয়।
Test Case এর উদাহরণ:
defmodule MathTest do
use ExUnit.Case
test "addition of two numbers" do
assert 2 + 3 == 5
end
test "multiplication of two numbers" do
assert 2 * 3 == 6
end
test "subtraction of two numbers" do
assert 5 - 3 == 2
end
endএখানে, MathTest মডিউলে তিনটি test cases তৈরি করা হয়েছে:
- প্রথমটি যোগফল যাচাই করে।
- দ্বিতীয়টি গুণফল যাচাই করে।
- তৃতীয়টি বিয়োগফল যাচাই করে।
টেস্ট চালানো:
Elixir তে mix test কমান্ড ব্যবহার করে আপনি টেস্ট চালাতে পারেন:
mix testএটি টেস্ট ফলাফল দেখাবে এবং কোন টেস্ট সফল হয়েছে বা ব্যর্থ হয়েছে তা জানাবে।
3. Test Suites তৈরি
Test Suite হল একাধিক টেস্ট কেসের একটি গ্রুপ যা একত্রে চলতে পারে। Elixir তে test suite তৈরি করার জন্য একাধিক টেস্ট মডিউল ব্যবহার করা হয়। একটি test suite সাধারণত একাধিক ফিচার বা ফাংশন পরীক্ষা করার জন্য একত্রিত টেস্ট কেসগুলোর একটি সংগ্রহ।
Test Suite এর উদাহরণ:
defmodule MathTest do
use ExUnit.Case
test "addition of two numbers" do
assert 2 + 3 == 5
end
test "multiplication of two numbers" do
assert 2 * 3 == 6
end
end
defmodule StringTest do
use ExUnit.Case
test "string concatenation" do
assert "hello" <> " " <> "world" == "hello world"
end
test "string length" do
assert String.length("hello") == 5
end
endএখানে, MathTest এবং StringTest দুটি আলাদা টেস্ট মডিউল তৈরি করা হয়েছে। এই দুটি মডিউল একসাথে টেস্ট সুইট হিসেবে কাজ করবে।
Test Suite চালানো:
আপনি mix test কমান্ড দিয়ে পুরো টেস্ট সুইট চালাতে পারেন:
mix testএটি সমস্ত টেস্ট মডিউল এবং তাদের মধ্যে থাকা টেস্ট কেসগুলো একযোগে চালাবে এবং ফলাফল দেখাবে।
4. টেস্ট হুকস (Test Hooks)
Elixir এর ExUnit ফ্রেমওয়ার্কে test hooks রয়েছে যা টেস্ট চলাকালীন কিছু কোড পূর্বে বা পরে এক্সিকিউট করার জন্য ব্যবহৃত হয়। এগুলি সাধারণত setup এবং teardown ফাংশনের মাধ্যমে ব্যবহৃত হয়।
setup এবং teardown:
- setup: টেস্ট চলানোর আগে কিছু প্রিপারেশন বা ডেটা সেটআপ করার জন্য ব্যবহৃত হয়।
- teardown: টেস্ট শেষ হওয়ার পরে কোনো ক্লিনআপ (cleanup) কাজ করার জন্য ব্যবহৃত হয়।
defmodule MyTestWithHooks do
use ExUnit.Case
# setup hook
setup do
{:ok, user: %{name: "Alice", age: 30}}
end
test "test with setup", context do
assert context[:user][:name] == "Alice"
end
endএখানে, setup ব্লকে user ডেটা তৈরি করা হয়েছে এবং টেস্টের মধ্যে এই ডেটা ব্যবহার করা হয়েছে। context অ্যাট্রিবিউটটি টেস্টের মধ্যে অ্যাক্সেস করা হচ্ছে।
5. টেস্টের ফলাফল (Test Result)
mix test চালানোর পরে আপনি টেস্টের ফলাফল দেখতে পাবেন। যদি সমস্ত টেস্ট সফল হয়, তবে এটি কিছু এইভাবে দেখাবে:
Finished in 0.03 seconds
3 tests, 0 failures, 0 skipped, 0 expected failures, 0 invalidযদি কোনো টেস্ট ব্যর্থ হয়, তবে ফলাফল এমন হবে:
Finished in 0.03 seconds
3 tests, 1 failure, 0 skipped, 0 expected failures, 0 invalidএখানে, ব্যর্থ টেস্টের ডিটেইলস সহ টেস্ট ফেইল করতে পারে এমন কারণে যথাযথ মেসেজ দেখানো হবে।
6. ExUnit এর কিছু গুরুত্বপূর্ণ টুলস
- assert: একটি মানের সঠিকতা যাচাই করে।
- refute: একটি শর্তের ভুল হওয়া নিশ্চিত করে।
- assert_raise: একটি এক্সসেপশন ঘটে কি না তা যাচাই করে।
- capture_io: I/O এর আউটপুট ক্যাপচার করে।
assert_raise Example:
test "raises an error" do
assert_raise ArgumentError, fn -> String.to_integer("not a number") end
endcapture_io Example:
test "capturing IO output" do
assert capture_io(fn -> IO.puts("Hello") end) == "Hello\n"
endসারসংক্ষেপ
ExUnit Elixir এর একটি শক্তিশালী টেস্টিং ফ্রেমওয়ার্ক যা ইউনিট টেস্টিং এবং টেস্ট সুইট তৈরি করতে ব্যবহৃত হয়। mix test কমান্ডের মাধ্যমে আপনি আপনার কোডের টেস্ট কেস এবং টেস্ট সুইট চালাতে পারেন। ExUnit ফ্রেমওয়ার্কে আপনি assert এবং refute এর মতো গুরুত্বপূর্ণ টুলস ব্যবহার করে আপনার কোডের ভ্যালিডিটি যাচাই করতে পারেন, এবং setup, teardown এর মতো টেস্ট হুকস ব্যবহার করে আপনার টেস্টের প্রস্তুতি এবং ক্লিনআপ পরিচালনা করতে পারেন।
Read more