টেস্টিং এর সময়, বিশেষ করে Unit Testing বা Integration Testing এর ক্ষেত্রে, কিছু নির্দিষ্ট পরিস্থিতিতে Fakes এবং Spies ব্যবহৃত হয়। এগুলো সাধারণত মকিং (Mocking) এবং স্টাবিং (Stubbing) এর সমার্থক, কিন্তু কিছু বিশেষ কার্যকারিতা ও ভূমিকা থাকে যা ফেকস এবং স্পাইজকে ইউনিক এবং গুরুত্বপূর্ণ করে তোলে। এগুলোর ব্যবহার টেস্টিং প্রক্রিয়াকে আরও কার্যকর এবং নির্ভুল করে তোলে। নিচে এই টুলগুলোর প্রয়োজনীয়তা ও ব্যবহারের উপকারিতা আলোচনা করা হলো।
১. Fakes (ফেকস)
Fake হল একটি অবজেক্ট বা মডিউল যা মূল অবজেক্ট বা সিস্টেমের সরল প্রতিস্থাপন হিসেবে কাজ করে। ফেকের মধ্যে সাধারণত একটি অল্প ফাংশনালিটি থাকে, কিন্তু এটি আসল সিস্টেমের মতো আচরণ করে এবং কার্যকরভাবে টেস্টে ব্যবহৃত হয়। এটি মূলত নির্দিষ্ট ডিপেন্ডেন্সি বা বাহ্যিক সিস্টেমের জন্য ব্যবহৃত হয় যেগুলো পুরোপুরি পরীক্ষায় অন্তর্ভুক্ত করা সম্ভব নয় বা যা মূল কোডের জন্য অনুপযুক্ত হতে পারে।
ফেকস এর প্রয়োজনীয়তা:
- বাহ্যিক নির্ভরশীলতাগুলির পরিবর্তে ব্যবহার: ফেকস ব্যবহার করা হয় যখন বাহ্যিক সিস্টেম বা ডেটাবেসের সাথে ইন্টারঅ্যাকশন করতে হয়, কিন্তু পুরো সিস্টেমটি পরীক্ষা করা উচিত নয়। উদাহরণস্বরূপ, যদি আপনার অ্যাপ্লিকেশন একটি তৃতীয় পক্ষের API কল করে, তাহলে আপনি সেই API-এর একটি ফেক তৈরি করে সেটা টেস্টে ব্যবহার করতে পারেন।
- কাস্টম অবজেক্ট তৈরি: ফেকস সাধারণত ছোট এবং সহজ অবজেক্ট তৈরি করতে ব্যবহৃত হয়, যা বড় এবং জটিল প্রকল্পের ক্ষেত্রে কার্যকরী।
উদাহরণ:
class FakePaymentGateway
def process_payment(amount)
# ফেক পেমেন্ট প্রসেসিং, এখানে আসল API কল করা হয় না।
true
end
endএখানে, FakePaymentGateway একটি সিম্পল ফেক ক্লাস যা আসল পেমেন্ট গেটওয়ের পরিবর্তে ব্যবহৃত হতে পারে টেস্টে।
২. Spies (স্পাইজ)
Spy হল এমন একটি অবজেক্ট যা টেস্ট চলাকালীন মেথড কল বা ফাংশন কল ট্র্যাক করার জন্য ব্যবহৃত হয়। এটি মূলত কোনও মেথড বা ফাংশনের কল লগ রাখে এবং নিশ্চিত করে যে সেটি সঠিকভাবে ট্রিগার হয়েছে কিনা, অথবা সঠিক আর্গুমেন্টের সাথে কল করা হয়েছে কিনা। স্পাইজ মূলত বাহ্যিক কার্যকলাপ অথবা ফাংশন কলস পর্যবেক্ষণ করতে ব্যবহৃত হয়, যা নিশ্চিত করে যে নির্দিষ্ট মেথড বা অ্যাকশন সঠিকভাবে কার্যকর হয়েছে।
স্পাইজ এর প্রয়োজনীয়তা:
- ফাংশন কল ট্র্যাকিং: স্পাইজ ব্যবহার করা হয় যখন আপনি পরীক্ষা করতে চান যে কোনো ফাংশন বা মেথড সঠিকভাবে কল হয়েছে কিনা। এটি নিশ্চিত করতে সহায়ক যে একটি নির্দিষ্ট ক্রিয়া (যেমন, একটি মেথড কল বা ইভেন্ট ট্রিগার) ঘটেছে বা হয়নি।
- কোডের অবস্থা যাচাই করা: স্পাইজ ব্যবহার করে আপনি নিশ্চিত করতে পারেন যে কোনো নির্দিষ্ট অবজেক্টের উপর কার্যকরী মেথড কল করা হয়েছে।
উদাহরণ:
class User
def notify_admin
AdminNotifier.send_email("admin@example.com")
end
end
describe User do
it "notifies the admin" do
spy = spy('AdminNotifier')
allow(AdminNotifier).to receive(:send_email).and_return(true)
spy.notify_admin
expect(spy).to have_received(:send_email).with("admin@example.com")
end
endএখানে spy দ্বারা আমরা AdminNotifier এর send_email মেথড কল ট্র্যাক করছি এবং নিশ্চিত হচ্ছি যে সঠিক আর্গুমেন্টের সাথে সেটি কল হয়েছে।
৩. Fakes এবং Spies এর মধ্যে পার্থক্য
| ফিচার | Fakes | Spies |
|---|---|---|
| প্রধান উদ্দেশ্য | বাহ্যিক নির্ভরশীলতা বা সিস্টেমের প্রতিস্থাপন করা | মেথড বা ফাংশন কল ট্র্যাক করা |
| ব্যবহার ক্ষেত্র | ডিপেন্ডেন্সি বা বাহ্যিক সিস্টেম (যেমন ডেটাবেস, API) পরীক্ষা করা | মেথড কল এবং কার্যকলাপ নিশ্চিত করা |
| কোডের পরিবর্তন | মূল কোডের কার্যকারিতা সিমুলেট করে | কার্যকলাপ ট্র্যাক করার জন্য কাজ করে |
| কোন ডেটা ফেরত দেয়? | ফেকস সাধারণত নির্দিষ্টভাবে তৈরি ডেটা ফেরত দেয় | স্পাইজ শুধুমাত্র মেথড কল ট্র্যাক করে, ফলাফল নয় |
৪. Fakes এবং Spies এর ব্যবহারিক উদাহরণ
Fake Example:
যেমন একটি ফেক ডেটাবেস:
class FakeDatabase
def find_user_by_email(email)
# ডাটাবেসের মূল কাজের পরিবর্তে এটি একটি সরল ফেক ডেটা ফেরত দেয়।
{ email: email, name: "John Doe" }
end
endএটি মূল ডেটাবেস অবজেক্টের একটি সরল ফেক। মূল ডেটাবেসের কাজটি না করে, এটি কেবল মক ডেটা সরবরাহ করে যা টেস্টের জন্য ব্যবহার করা হয়।
Spy Example:
যেমন একটি স্পাই ব্যবহার করে ফাংশন কল পরীক্ষা:
class EmailSender
def send_welcome_email(user)
# মেইল পাঠানোর লজিক
puts "Sending email to #{user.email}"
end
end
describe EmailSender do
it "calls send_welcome_email with the correct argument" do
spy = spy('EmailSender')
user = double('User', email: 'user@example.com')
spy.send_welcome_email(user)
expect(spy).to have_received(:send_welcome_email).with(user)
end
endএখানে, স্পাই ব্যবহার করে send_welcome_email মেথড কল ট্র্যাক করা হয়েছে, এবং এটি নিশ্চিত করা হয়েছে যে এটি সঠিক আর্গুমেন্টের সাথে কল হয়েছে।
সারাংশ
Fakes এবং Spies টেস্টিং এর জন্য খুবই গুরুত্বপূর্ণ টুল, যা বিশেষভাবে কোডের নির্ভুলতা নিশ্চিত করতে ব্যবহৃত হয়:
- Fakes ব্যবহার করা হয় যখন বাহ্যিক নির্ভরশীলতা বা সিস্টেম (যেমন, ডেটাবেস, API) পরীক্ষা করা হয়।
- Spies ব্যবহার করা হয় মেথড কল পর্যবেক্ষণ করতে, এটি নিশ্চিত করার জন্য যে কোড সঠিকভাবে কার্যকর হচ্ছে।
এই টুলগুলো Unit Testing এবং Integration Testing প্রক্রিয়াকে আরও দক্ষ এবং নির্ভুল করতে সাহায্য করে।