Unit Testing হল কোডের ছোট ছোট একক অংশ (যেমন ফাংশন বা মেথড) পরীক্ষা করার প্রক্রিয়া, যাতে কোডের প্রতিটি অংশ সঠিকভাবে কাজ করছে কিনা নিশ্চিত করা যায়। Rust-এ ইউনিট টেস্ট সাধারণত একটি নির্দিষ্ট ফাংশন বা মেথডের আচরণ যাচাই করার জন্য ব্যবহৃত হয়।
ইউনিট টেস্ট লেখার ধাপ:
- টেস্ট মডিউল তৈরি করা: ইউনিট টেস্ট সাধারণত একই ফাইলে
#[cfg(test)]অ্যাট্রিবিউটের মাধ্যমে একটি টেস্ট মডিউল তৈরি করা হয়। #[test]অ্যাট্রিবিউট: প্রতিটি টেস্ট ফাংশনের আগে#[test]অ্যাট্রিবিউট ব্যবহার করা হয়।
উদাহরণ: ইউনিট টেস্ট
fn add(a: i32, b: i32) -> i32 {
a + b
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_add() {
assert_eq!(add(2, 3), 5); // এখানে add() ফাংশন পরীক্ষা করা হচ্ছে
}
#[test]
fn test_add_negative() {
assert_eq!(add(-1, -1), -2); // নেতিবাচক সংখ্যার জন্য টেস্ট
}
}এখানে:
add()ফাংশনটি দুটি ইনপুট গ্রহণ করে এবং তাদের যোগফল প্রদান করে।#[cfg(test)]নির্দেশ করে যে,testsমডিউলটি শুধুমাত্র টেস্ট চলানোর সময় কার্যকর হবে।#[test]অ্যাট্রিবিউট টেস্ট ফাংশন চিহ্নিত করে।assert_eq!ম্যাক্রো ব্যবহার করে প্রত্যাশিত এবং বাস্তব আউটপুট তুলনা করা হয়।
টেস্ট চালানো:
cargo testএটি আপনার সমস্ত টেস্ট চালাবে এবং ফলাফল প্রদর্শন করবে।
Integration Tests (ইন্টিগ্রেশন টেস্ট)
Integration Testing হল একাধিক কোড কম্পোনেন্ট বা মডিউল একত্রে কাজ করছে কিনা তা যাচাই করার প্রক্রিয়া। ইউনিট টেস্ট যেখানে একটি নির্দিষ্ট ফাংশন বা মেথড পরীক্ষা করে, ইন্টিগ্রেশন টেস্ট সম্পূর্ণ অ্যাপ্লিকেশন বা বিভিন্ন মডিউলের পারস্পরিক কাজ যাচাই করে।
ইন্টিগ্রেশন টেস্ট লেখার ধাপ:
- আলাদা ফোল্ডারে ইন্টিগ্রেশন টেস্ট রাখা: Rust-এ ইন্টিগ্রেশন টেস্ট সাধারণত
tests/ডিরেক্টরিতে থাকে, যা প্রোজেক্ট রুটে সৃষ্ট হয়। - একাধিক ফাংশন বা মডিউল পরীক্ষা করা: আপনি ইন্টিগ্রেশন টেস্টে পুরো অ্যাপ্লিকেশন বা একাধিক মডিউল একসাথে পরীক্ষা করতে পারেন।
উদাহরণ: ইন্টিগ্রেশন টেস্ট
ধরা যাক, আমাদের কাছে দুটি ফাইল রয়েছে:
src/lib.rs: মূল কোডtests/integration_test.rs: ইন্টিগ্রেশন টেস্ট
src/lib.rs:
pub fn add(a: i32, b: i32) -> i32 {
a + b
}
pub fn subtract(a: i32, b: i32) -> i32 {
a - b
}tests/integration_test.rs:
use my_project::add;
use my_project::subtract;
#[test]
fn test_addition() {
assert_eq!(add(2, 3), 5); // add() ফাংশন পরীক্ষা
}
#[test]
fn test_subtraction() {
assert_eq!(subtract(5, 3), 2); // subtract() ফাংশন পরীক্ষা
}এখানে, ইন্টিগ্রেশন টেস্ট add() এবং subtract() ফাংশনগুলো একত্রে পরীক্ষা করছে। আমরা my_project নামের ক্রেটটি ইনপোর্ট করেছি এবং এই ক্রেটের পাবলিক ফাংশনগুলোর সাথে টেস্ট করেছি।
টেস্ট চালানো:
cargo testএটি আপনার ইউনিট টেস্ট এবং ইন্টিগ্রেশন টেস্ট উভয়ই চালাবে এবং ফলাফল প্রদর্শন করবে।
Test Organization (টেস্ট সংগঠন)
Rust-এ টেস্টিং কার্যক্রমকে সংগঠিত করার জন্য কিছু কৌশল রয়েছে:
- উপযুক্ত ফোল্ডার সংরক্ষণ: ইউনিট টেস্টগুলি সোর্স কোডের মধ্যে রাখা হয়, তবে ইন্টিগ্রেশন টেস্টগুলি আলাদা
tests/ডিরেক্টরিতে থাকে। - মডিউল ভিত্তিক টেস্ট: প্রতিটি ফাংশন বা মডিউল এককভাবে পরীক্ষা করার জন্য আলাদা টেস্ট ফাংশন লিখুন। এটি কোডের পরিস্কারতা এবং রক্ষণাবেক্ষণ সহজ করে তোলে।
- ফিচার টেস্ট: যখন আপনার কোডে বিভিন্ন বৈশিষ্ট্য থাকে, তখন
#[cfg(feature = "foo")]ব্যবহার করে নির্দিষ্ট বৈশিষ্ট্য পরীক্ষা করা যায়।
টেস্ট রানের অন্যান্য অপশন
টেস্ট ফাংশন নাম দিয়ে নির্দিষ্ট টেস্ট রান:
cargo test test_additionফিল্টার দ্বারা টেস্ট চালানো: যদি আপনি একটি নির্দিষ্ট ফিচার বা প্যাটার্ন অনুযায়ী টেস্ট চালাতে চান:
cargo test "addition"ব্যর্থ টেস্টের বিস্তারিত আউটপুট দেখা:
cargo test -- --nocapture
সারাংশ
Unit Tests এবং Integration Tests Rust-এ কোডের সঠিকতা নিশ্চিত করার জন্য অপরিহার্য। ইউনিট টেস্ট কোডের ছোট একক অংশ পরীক্ষা করে, এবং ইন্টিগ্রেশন টেস্ট কোডের বৃহত্তর অংশ বা একাধিক মডিউল পরীক্ষা করে। Rust-এ টেস্টিং কার্যক্রমের জন্য cargo test কমান্ড ব্যবহার করা হয় এবং টেস্ট লেখার জন্য #[test] অ্যাট্রিবিউট ব্যবহার করা হয়। Rust-এর টেস্টিং কাঠামো কোডের গুণগত মান নিশ্চিত করতে সহায়ক এবং এটি প্রকল্পে দ্রুত উন্নয়ন করতে সহায়তা করে।
Read more