Fakes এবং Spies হল সফটওয়্যার টেস্টিং এর দুটি গুরুত্বপূর্ণ কৌশল, যেগুলি সাধারণত Mocking এবং Stubbing এর অংশ হিসেবে ব্যবহৃত হয়। এগুলি বিশেষ করে RSpec বা অন্যান্য টেস্টিং ফ্রেমওয়ার্কে ব্যবহৃত হয় যখন টেস্ট করার সময় নির্দিষ্ট ডিপেন্ডেন্সি বা বাহ্যিক সিস্টেমের উপর নির্ভরশীলতা কমাতে হয়। Fakes এবং Spies ডেভেলপারদের টেস্ট পরিবেশে কোডের নির্ভরশীলতাগুলি অনুকরণ (mock) করতে সহায়ক, যাতে মূল সিস্টেমের কার্যকারিতা থেকে বিভ্রান্তি এড়ানো যায়।
Fake কী?
Fake হলো একটি কাস্টম অবজেক্ট বা ক্লাস যা আসল সিস্টেমের আচরণ নকল করে, তবে কিছুটা সাধারণ বা কমপ্লেক্স হতে পারে। Fakes মূলত বাহ্যিক সিস্টেম বা ডিপেন্ডেন্সি (যেমন: ডাটাবেস, API) এর রিপ্লেসমেন্ট হিসেবে কাজ করে। এগুলি আসল সিস্টেমের তুলনায় সাধারণ, তবে কিছুক্ষেত্রে পুরোপুরি কার্যকরী।
Fake এর উদাহরণ:
ধরা যাক, আপনি একটি টেস্টে ডাটাবেসের পরিবর্তে একটি Fake ডাটাবেস ব্যবহার করতে চান। Fake ডাটাবেস আসল ডাটাবেসের মতই কাজ করে, তবে এটি সাধারণভাবে একটি ইন-মেমরি ডাটাবেস হতে পারে যা আসল ডাটাবেসের ডেটা প্রবাহ অনুকরণ করে।
class FakeDatabase
def initialize
@data = []
end
def save(record)
@data << record
end
def find(id)
@data.find { |record| record.id == id }
end
endএখানে FakeDatabase ক্লাসটি আসল ডাটাবেসের একটি সাধারণ প্রতিস্থাপন। এটি ডেটা সংরক্ষণ এবং খোঁজার জন্য একই ধরনের ইন্টারফেস প্রদান করে, তবে আসল ডাটাবেসের মতো কার্যকরী না হওয়া সত্ত্বেও এটি টেস্টের জন্য যথেষ্ট।
Spy কী?
Spy হল এমন একটি টেস্টিং কৌশল যা কোডের মধ্যে কোনো কার্যকলাপ ট্র্যাক করার জন্য ব্যবহৃত হয়। স্পাই সাধারণত method calls অথবা property accesses ট্র্যাক করে, এবং এটি জানিয়ে দেয় যে কোনো মেথড কল হয়েছে কিনা এবং কিভাবে সেটা ঘটেছে। এটি সাধারণত stubbing বা mocking এর সাথে ব্যবহৃত হয়, তবে এর মূল লক্ষ্য হল মেথডের কল বা ডেটার পরিবর্তন রেকর্ড করা।
Spy এর উদাহরণ:
একটি সাধারণ উদাহরণ হিসেবে, যদি আমাদের একটি টেস্টে নিশ্চিত করতে হয় যে একটি মেথড কল হয়েছে, তাহলে Spy ব্যবহার করা যেতে পারে:
class Calculator
def add(a, b)
result = a + b
log(result) # আমরা এখানে log মেথড কল করতে চাই
result
end
def log(value)
puts "Logging: #{value}"
end
end
describe Calculator do
it "logs the result of add" do
calculator = Calculator.new
spy = spy("log") # Spy object
allow(calculator).to receive(:log).and_call_original # Allow the log method to be called
calculator.add(2, 3)
expect(spy).to have_received(:log).with(5) # Checking if the log method was called with 5
end
endএখানে:
spy("log")স্পাই হিসেবে ব্যবহৃত হয়েছে, যাlogমেথডের কল ট্র্যাক করছে।have_received(:log)ব্যবহার করে আমরা নিশ্চিত হচ্ছি যেlogমেথডটি ৫ মানের সঙ্গে কল করা হয়েছে।
Fakes এবং Spies এর মধ্যে পার্থক্য
| Feature | Fake | Spy |
|---|---|---|
| Purpose | আসল সিস্টেমের আচরণ নকল করা (মধ্যবর্তী সিস্টেম) | মেথড কল এবং আর্গুমেন্ট ট্র্যাক করা |
| Usage | ডিপেন্ডেন্সি বা বাহ্যিক সিস্টেম রিপ্লেস করা | একটি মেথড কল হয়েছে কিনা তা যাচাই করা |
| Interaction | কিছু কার্যক্রম সম্পাদন করতে সক্ষম (স্টাব বা ফাংশনাল) | শুধুমাত্র কল ট্র্যাক করা (অ্যাক্সেস করা) |
| Example | Fake ডাটাবেস, Fake সার্ভার | Spy মেথড কল, Spy মেসেজ/লগ |
| Complexity | অধিকাংশ সময় জটিল এবং বাস্তবতায় সম্পূর্ণ সমর্থন প্রদান করে | সাধারণত মেথড কল ট্র্যাকিং এর জন্য সহজ |
সারাংশ
Fakes এবং Spies টেস্টিংয়ে শক্তিশালী টুল যা টেস্টের সময় বাইরের সিস্টেমের উপর নির্ভরশীলতা কমায় এবং শুধুমাত্র সেই কার্যাবলী পরীক্ষা করতে সহায়ক হয় যা আপনাকে প্রয়োজন। Fakes আসল সিস্টেমের আচরণ অনুকরণ করে, যেখানে Spies মেথড কল বা কার্যকলাপ ট্র্যাক করে। Fakes সাধারণত কাস্টম সিস্টেম তৈরিতে ব্যবহার হয়, এবং Spies মেথড কলের ব্যবহার বা আচরণ যাচাই করতে ব্যবহৃত হয়।
Read more