Test Doubles হল এমন একটি কৌশল যা সফটওয়্যার টেস্টিংয়ের সময়, বিশেষত ইউনিট টেস্টিং বা ইন্টিগ্রেশন টেস্টিং এ ব্যবহৃত হয়, যেখানে টেস্টিং কোডের নির্ভরশীলতা (dependencies) অথবা বাহ্যিক সিস্টেম (যেমন ডাটাবেস, API, ফাইল সিস্টেম ইত্যাদি) সিমুলেট (অনুকরণ) করা হয়। এই অনুকৃত অবজেক্টগুলোকে Test Doubles বলা হয়, কারণ তারা আসল অবজেক্টের মতোই কাজ করে, কিন্তু শুধুমাত্র টেস্টিং উদ্দেশ্যে ব্যবহৃত হয়।
Test Doubles এর মাধ্যমে, টেস্টিংয়ের সময় বাহ্যিক সিস্টেম বা কোডের নির্ভরশীলতা মক বা স্টাব করা যায়, যা টেস্টকে আরও দ্রুত, নির্ভুল এবং কন্ট্রোলেবল করে তোলে। এতে রিয়েল ডেটা বা প্রকৃত সিস্টেমের যোগাযোগ ছাড়াই শুধুমাত্র সেই অংশটির কার্যকারিতা পরীক্ষা করা সম্ভব হয় যা আপনি টেস্ট করতে চান।
Test Doubles এর ধরনসমূহ
Test Doubles বিভিন্ন ধরনের হতে পারে, যার মধ্যে কিছু সাধারণ ধরনের হলো:
Mocks:
- Mocks হল এমন অবজেক্ট যা নির্দিষ্ট মেথড কল করার জন্য ব্যবহার করা হয় এবং তাদের আচরণ পূর্বনির্ধারিত থাকে। আপনি যখন মক ব্যবহার করেন, তখন আপনি চাচ্ছেন টেস্টের সময় নির্দিষ্ট মেথড কল হয় কি না এবং সেগুলোর আউটপুট কী।
- Mocks এ সাধারণত এক্সপেকটেশন থাকে, অর্থাৎ কোন মেথড কবে এবং কীভাবে কল হবে তা নির্ধারিত থাকে।
উদাহরণ:
class User def send_email # ইমেইল পাঠানোর কোড end end describe User do it "ইমেইল পাঠানোর জন্য send_email কল করবে" do user = double("User") expect(user).to receive(:send_email) user.send_email end endStubs:
- Stubs হল এমন অবজেক্ট যা মেথড কল করার সময় একটি পূর্বনির্ধারিত ফলাফল প্রদান করে। এটি মূলত আউটপুটের জন্য ব্যবহৃত হয়, এবং এই আউটপুটটি আপনার টেস্টের জন্য প্রয়োজনীয় ফলাফল হতে পারে।
- Stubs কোনো এক্সপেকটেশন রাখে না, শুধুমাত্র আউটপুট প্রদান করে।
উদাহরণ:
class Calculator def add(a, b) a + b end end describe Calculator do it "দ্বি-সংখ্যার যোগফল প্রদান করবে" do calculator = double("Calculator") allow(calculator).to receive(:add).and_return(5) expect(calculator.add(2, 3)).to eq(5) end endSpies:
- Spies হল এমন অবজেক্ট যা কোনো নির্দিষ্ট মেথড কল হয়নি বা হওয়া উচিত তা রেকর্ড করে। এটি মক এবং স্টাবের সংমিশ্রণ হতে পারে। Spies এর মাধ্যমে আপনি মেথড কলগুলো ট্র্যাক করতে পারবেন, কিন্তু সেই কলের জন্য পূর্বনির্ধারিত আউটপুট নেই।
উদাহরণ:
class Logger def log(message) # মেসেজ লগ করার কোড end end describe Logger do it "log মেথড কল হবে" do logger = spy("Logger") logger.log("Hello") expect(logger).to have_received(:log).with("Hello") end end- Fakes:
- Fakes হল এমন বাস্তব অবজেক্ট যেগুলো সাধারণত সম্পূর্ণভাবে বাস্তব নয়, কিন্তু তারা সাধারণভাবে ডেভেলপমেন্ট পরিবেশে কাজ করে। Fakes ব্যবহার করে একটি নির্দিষ্ট কাজ সাধিত হয়, তবে তারা প্রকৃত সিস্টেমের মতো কাজ না করতে পারে।
- উদাহরণস্বরূপ, একটি ফেক ডাটাবেস যা কেবল ডেটা সেভ বা রিট্রিভ করার সহজ প্রক্রিয়া অনুকরণ করে।
Test Doubles এর প্রয়োজনীয়তা
- বাহ্যিক নির্ভরশীলতা এবং এক্সটার্নাল সিস্টেমের থেকে মুক্তি: যখন বাহ্যিক সিস্টেম (যেমন API, ডাটাবেস) ব্যবহার করতে পারি না বা সেগুলোর সঙ্গে কাজ করা সম্ভব নয়, তখন Test Doubles ব্যবহৃত হয়।
- টেস্টের গতিশীলতা ও নির্ভুলতা: Test Doubles ব্যবহার করে টেস্টগুলি দ্রুত চালানো যায় কারণ বাহ্যিক সিস্টেমের সাথে যোগাযোগের সময়ের প্রয়োজন হয় না। পাশাপাশি, বাহ্যিক সিস্টেমের পরিবর্তন টেস্টের ফলাফলে প্রভাব ফেলবে না।
- টেস্টের নির্ভুলতা: বাহ্যিক সিস্টেমের পরিবর্তন অথবা গোলমালের কারণে কোডে ভুল প্রভাব না পড়ে সঠিকভাবে নির্দিষ্ট ফিচারের আচরণ পরীক্ষা করা সম্ভব হয়।
- অপর্যাপ্ত ডেটার জন্য: যখন ডেটাবেসে পর্যাপ্ত ডেটা থাকে না অথবা ডেটা আনুপাতিক না হলে, তখন Test Doubles ব্যবহার করে সেই আচরণ পরীক্ষা করা যায়।
- কমপ্লেক্স সিস্টেমে কাজ করার সময়: যদি সিস্টেমে অনেক ইন্টারঅ্যাকশন বা সিস্টেম ডিপেন্ডেন্সি থাকে, তবে সেগুলোর অনুকরণ করে টেস্ট লেখা সহজ হয়।
Test Doubles এর ব্যবহার
- ইউনিট টেস্টিং: Test Doubles ব্যবহার করে নির্দিষ্ট ইউনিটের ফাংশনালিটি পরীক্ষা করা, যেমন মেথড কল বা আউটপুট।
- ইন্টিগ্রেশন টেস্টিং: বহিরাগত সিস্টেমের সাথে যোগাযোগ না করে বিভিন্ন সিস্টেমের মধ্যে যোগাযোগ পরীক্ষা করা।
- রিগ্রেশন টেস্টিং: পূর্ববর্তী ত্রুটি এবং বর্তমান ফিচারের মধ্যে সম্পর্ক পরীক্ষা করা।
সারাংশ
Test Doubles হল সফটওয়্যার টেস্টিংয়ের শক্তিশালী টুল যা বাহ্যিক নির্ভরশীলতা এবং সিস্টেমের সঙ্গে যোগাযোগ ছাড়া নির্দিষ্ট ফিচারের আচরণ পরীক্ষা করতে ব্যবহৃত হয়। Mocks, Stubs, Spies, এবং Fakes এগুলোর প্রধান প্রকার, যা বিভিন্ন পরিস্থিতিতে ব্যবহৃত হয় টেস্টের কার্যকারিতা, গতি এবং নির্ভুলতা উন্নত করতে। Test Doubles ব্যবহারের মাধ্যমে ডেভেলপাররা সহজে নির্ভরশীলতাগুলি মক করে, এক্সটার্নাল সিস্টেমের কোনো প্রভাব ছাড়াই কোডের সঠিকতা নিশ্চিত করতে পারেন।
Read more