Mocks এবং Stubs হল বাহ্যিক নির্ভরশীলতা বা ফাংশনাল অংশের অনুকরণ (mocking) এর দুটি গুরুত্বপূর্ণ উপাদান যা RSpec এবং অন্যান্য টেস্টিং ফ্রেমওয়ার্কে ব্যবহৃত হয়। এগুলি মূলত ডিপেনডেন্সি ইনজেকশন ও ইউনিট টেস্টিং এর ক্ষেত্রে সাহায্য করে, যেখানে বাহ্যিক সিস্টেম (যেমন ডাটাবেস, API কল, বা ফাইল সিস্টেম) সরাসরি টেস্টের অংশ না হয়ে, মক বা স্টাব করা হয়।
তাদের মূল উদ্দেশ্য হল টেস্টিং পরিবেশে নির্দিষ্ট কিছু কন্ডিশন তৈরি করা, যাতে কোডের লজিক সহজে পরীক্ষা করা যায়।
১. Mocks (মক)
Mock হল এমন একটি অবজেক্ট বা ফাংশন যা অনুকরণ করে একটি নির্দিষ্ট বাহ্যিক সিস্টেম বা উপাদানকে। যখন কোন নির্দিষ্ট অবজেক্ট বা মেথডের আচরণ পরীক্ষিত হতে হয়, তখন মক ব্যবহার করা হয়। মক ব্যবহারের সময়, আপনি বিশেষভাবে সেট করেন যে মক করা অবজেক্টটি কিভাবে আচরণ করবে, এবং টেস্ট রান করার সময় এটি সেই আচরণ অনুসরণ করবে।
মৌলিক বৈশিষ্ট্য:
- অভ্যন্তরীণ আচরণ নির্ধারণ করা হয়।
- ফাংশন কলের প্রত্যাশা করা হয়, অর্থাৎ, কেমন কল আসবে এবং কতবার আসবে।
- যদি কোনো কল প্রত্যাশিত না হয়, তবে এটি টেস্টের ব্যর্থতা ঘটায়।
উদাহরণ:
class User
def send_email
# এটি আসল মেইল সিস্টেমকে কল করবে
end
end
describe User do
it "মেইল পাঠানোর জন্য send_email মেথড কল করবে" do
user = double("User") # মক অবজেক্ট তৈরি
allow(user).to receive(:send_email) # মক মেথড
user.send_email
expect(user).to have_received(:send_email) # প্রত্যাশিত কলের জন্য পরীক্ষা
end
endএখানে, send_email মেথডটি double দ্বারা মক করা হয়েছে এবং have_received Matcher দিয়ে যাচাই করা হয়েছে।
২. Stubs (স্টাব)
Stub হলো এমন একটি অবজেক্ট বা মেথড যা কেবলমাত্র নির্দিষ্ট ফলাফল প্রদান করে, কিন্তু কোনো নির্দিষ্ট কার্যক্রম (behaviour) সম্পাদন না করে। স্টাব সাধারণত ফাংশন/মেথডের আউটপুট কন্ট্রোল করতে ব্যবহৃত হয়, যাতে টেস্টের সময় নির্দিষ্ট ফলাফল মক করা যায়। এটি কোডের বাইরে কোনো বাহ্যিক সিস্টেমে (যেমন, ডাটাবেস বা API) কল না করে, একটি নির্দিষ্ট ফলাফল ফেরত দেয়।
মৌলিক বৈশিষ্ট্য:
- ফলাফল বা আউটপুট নির্ধারণ করা হয়, কিন্তু কার্যকলাপের আচরণ নয়।
- বাহ্যিক কল বা প্রক্রিয়া না চালিয়েও, শুধুমাত্র ফলাফল প্রদান করা হয়।
- প্রত্যাশিত আউটপুট প্রদান করা হয়, তবে কোনো কার্যকলাপ বা অবস্থা পরীক্ষা করা হয় না।
উদাহরণ:
class Calculator
def add(a, b)
a + b
end
end
describe Calculator do
it "যোগফল প্রদান করবে" do
calc = double("Calculator")
allow(calc).to receive(:add).with(2, 3).and_return(5) # স্টাব মেথড
result = calc.add(2, 3)
expect(result).to eq(5) # স্টাব ফলাফল যাচাই
end
endএখানে, add মেথডটিকে স্টাব করা হয়েছে এবং with ও and_return দ্বারা নির্দিষ্ট আউটপুট প্রদান করা হয়েছে।
Mocks এবং Stubs এর মধ্যে পার্থক্য
| বৈশিষ্ট্য | Mocks | Stubs |
|---|---|---|
| প্রধান লক্ষ্য | কলের প্রত্যাশা পরীক্ষা করা | নির্দিষ্ট আউটপুট প্রদান করা |
| ব্যবহার | আচরণ যাচাই করা (কতবার কল হয়েছে) | নির্দিষ্ট আউটপুট প্রদান করা |
| পরীক্ষা | কলের প্রতিক্রিয়া ও আচরণ পরীক্ষা | শুধুমাত্র আউটপুট পরীক্ষা করা |
| ভুল হলে | যদি কল প্রত্যাশিত না হয়, তাহলে টেস্ট ব্যর্থ হয় | যদি ফলাফল সঠিক না হয়, তাহলে টেস্ট ব্যর্থ হয় |
সারাংশ
Mocks এবং Stubs হল টেস্টিং টুলস যা বাহ্যিক নির্ভরশীলতাগুলিকে মক বা স্টাব করতে সাহায্য করে। Mocks ব্যবহার করা হয় যখন নির্দিষ্ট আচরণ বা কল পরীক্ষা করতে হয় এবং Stubs ব্যবহার করা হয় যখন নির্দিষ্ট আউটপুট প্রদান করতে হয়। এগুলি ডেভেলপারদের তাদের কোডের লজিক পরীক্ষা করতে সাহায্য করে, বাহ্যিক সিস্টেম বা উপাদানগুলোকে টেস্টের বাইরে রেখে।
Read more