Haskell এ Unit Testing এর জন্য HUnit
HUnit হলো Haskell এর একটি জনপ্রিয় লাইব্রেরি যা ইউনিট টেস্টিং এর জন্য ব্যবহৃত হয়। এটি Haskell কোডের ছোট ছোট অংশ পরীক্ষা করতে সাহায্য করে, যার মাধ্যমে প্রোগ্রামাররা তাদের কোডের সঠিকতা নিশ্চিত করতে পারেন। HUnit Haskell এর Test.HUnit মডিউলের মাধ্যমে টেস্ট ফ্রেমওয়ার্ক সরবরাহ করে, যা JUnit এর অনুরূপ একটি স্টাইলের ভিত্তিতে কাজ করে।
HUnit এর মাধ্যমে আপনি নির্দিষ্ট ফাংশন বা মডিউলগুলো পরীক্ষা করতে পারেন এবং প্রত্যাশিত ফলাফল অনুযায়ী তাদের সঠিকতা যাচাই করতে পারেন। এটি কোডের নির্ভুলতা এবং স্টেবল রিলিজ নিশ্চিত করতে সাহায্য করে।
HUnit এর মূল ধারণা
HUnit এ টেস্ট তৈরি করতে, প্রধানত দুটি ধারণা ব্যবহৃত হয়:
- TestCase: একটি নির্দিষ্ট টেস্ট যা একটি ফাংশন বা কোডের অংশ পরীক্ষা করে।
- TestList: একাধিক টেস্টের একটি তালিকা, যা একত্রে চালানো যায়।
HUnit ব্যবহার করে assertion করা হয়, অর্থাৎ একটি টেস্টের প্রত্যাশিত ফলাফল এবং প্রকৃত ফলাফলের তুলনা করা হয়।
1. HUnit ইনস্টল করা
HUnit ব্যবহার করার জন্য প্রথমে আপনাকে HUnit লাইব্রেরি ইনস্টল করতে হবে। এটি Cabal বা Stack এর মাধ্যমে ইনস্টল করা যেতে পারে।
Cabal এর মাধ্যমে ইনস্টল:
cabal update
cabal install HUnitStack এর মাধ্যমে ইনস্টল:
stack add HUnit2. HUnit এর বেসিক ব্যবহার
HUnit এর মাধ্যমে টেস্ট তৈরি করতে Test.HUnit মডিউল ইমপোর্ট করতে হয় এবং তারপর টেস্ট কেসগুলো তৈরি করা হয়।
উদাহরণ: একটি সহজ টেস্ট
ধরা যাক আমাদের একটি add ফাংশন আছে যেটি দুটি সংখ্যার যোগফল প্রদান করে। আমরা এই ফাংশনটি HUnit এর মাধ্যমে পরীক্ষা করতে চাই।
import Test.HUnit
-- ফাংশন সংজ্ঞা
add :: Int -> Int -> Int
add x y = x + y
-- টেস্ট কেস
testAdd :: Test
testAdd = TestCase (assertEqual "for (add 2 3)," (add 2 3) 5)
-- মেইন ফাংশন
main :: IO Counts
main = runTestTT testAddএখানে:
TestCaseএকটি নির্দিষ্ট টেস্ট কেস তৈরি করে, যা একটি এক্সপ্রেশন পরীক্ষা করে।assertEqualএকটি assertion ফাংশন, যা দুটি মানের তুলনা করে। যদি তারা সমান হয়, তবে টেস্ট সফল হবে, অন্যথায় ব্যর্থ হবে।runTestTTটেস্ট রান করার জন্য ব্যবহৃত হয়।
আউটপুট:
for (add 2 3), 5
Cases: 1 Tried: 1 Errors: 0 Failures: 0এখানে, আমাদের add ফাংশন সঠিকভাবে কাজ করছে এবং টেস্ট সফল হয়েছে।
3. একাধিক টেস্ট তৈরি করা
একাধিক টেস্ট কেস একত্রে চালানোর জন্য TestList ব্যবহার করা হয়। এখানে, একাধিক টেস্ট কেস একত্রে runTestTT এর মাধ্যমে চালানো যায়।
উদাহরণ: একাধিক টেস্ট
import Test.HUnit
-- ফাংশন সংজ্ঞা
add :: Int -> Int -> Int
add x y = x + y
subtract' :: Int -> Int -> Int
subtract' x y = x - y
-- টেস্ট কেস
testAdd :: Test
testAdd = TestCase (assertEqual "for (add 2 3)," (add 2 3) 5)
testSubtract :: Test
testSubtract = TestCase (assertEqual "for (subtract' 5 3)," (subtract' 5 3) 2)
-- টেস্ট লিস্ট
tests :: Test
tests = TestList [testAdd, testSubtract]
-- মেইন ফাংশন
main :: IO Counts
main = runTestTT testsএখানে:
TestListব্যবহার করে দুটি টেস্ট কেস একত্রে রাখা হয়েছে।runTestTTব্যবহার করে একসাথে টেস্টগুলি চালানো হয়েছে।
আউটপুট:
for (add 2 3), 5
for (subtract' 5 3), 2
Cases: 2 Tried: 2 Errors: 0 Failures: 04. এডভান্সড টেস্টিং: Exception Handling
HUnit এ টেস্টের মধ্যে Exception Handling করা যেতে পারে। উদাহরণস্বরূপ, যদি একটি ফাংশন কোনো ত্রুটি (exception) ঘটায়, তবে তা টেস্টে ধরা যেতে পারে।
উদাহরণ: Exception Handling
import Test.HUnit
import Control.Exception (evaluate)
-- ফাংশন সংজ্ঞা
divide :: Int -> Int -> Int
divide x 0 = error "Division by zero"
divide x y = x `div` y
-- টেস্ট কেস
testDivide :: Test
testDivide = TestCase (do
result <- evaluate (divide 10 0)
assertEqual "for (divide 10 0)," result 0)
-- মেইন ফাংশন
main :: IO Counts
main = runTestTT testDivideএখানে, evaluate ব্যবহার করা হয়েছে যাতে আমরা কোনো ত্রুটির মুখোমুখি হলে তা পরীক্ষা করতে পারি।
5. Custom Assertion Functions
HUnit এর মাধ্যমে আপনি কাস্টম assertion ফাংশনও তৈরি করতে পারেন, যেমন:
import Test.HUnit
-- কাস্টম assertion ফাংশন
assertIsPositive :: (Num a, Ord a) => a -> Assertion
assertIsPositive x = assertBool "Value is not positive" (x > 0)
-- টেস্ট কেস
testPositive :: Test
testPositive = TestCase (assertIsPositive 5)
-- মেইন ফাংশন
main :: IO Counts
main = runTestTT testPositiveএখানে assertIsPositive একটি কাস্টম assertion ফাংশন যা মানটি ধনাত্মক কিনা তা পরীক্ষা করে।
উপসংহার
HUnit Haskell এ ইউনিট টেস্টিং করার জন্য একটি সহজ এবং কার্যকরী লাইব্রেরি। এটি ফাংশন, কোড ব্লক এবং প্রোগ্রামগুলোর সঠিকতা পরীক্ষা করার জন্য ব্যবহৃত হয়। HUnit এর মাধ্যমে, আপনি ফাংশনাল প্রোগ্রামিংয়ে নিরাপদ এবং নির্ভরযোগ্য কোড লিখতে পারবেন এবং আপনার কোডের কার্যকারিতা নিশ্চিত করতে পারবেন।
Read more