Fakes এবং Spies এর ধারণা

RSpec Fakes এবং Spies (RSpec Fakes and Spies) - আরএসপেক (RSpec) - Computer Programming

348

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 এর মধ্যে পার্থক্য

FeatureFakeSpy
Purposeআসল সিস্টেমের আচরণ নকল করা (মধ্যবর্তী সিস্টেম)মেথড কল এবং আর্গুমেন্ট ট্র্যাক করা
Usageডিপেন্ডেন্সি বা বাহ্যিক সিস্টেম রিপ্লেস করাএকটি মেথড কল হয়েছে কিনা তা যাচাই করা
Interactionকিছু কার্যক্রম সম্পাদন করতে সক্ষম (স্টাব বা ফাংশনাল)শুধুমাত্র কল ট্র্যাক করা (অ্যাক্সেস করা)
ExampleFake ডাটাবেস, Fake সার্ভারSpy মেথড কল, Spy মেসেজ/লগ
Complexityঅধিকাংশ সময় জটিল এবং বাস্তবতায় সম্পূর্ণ সমর্থন প্রদান করেসাধারণত মেথড কল ট্র্যাকিং এর জন্য সহজ

সারাংশ

Fakes এবং Spies টেস্টিংয়ে শক্তিশালী টুল যা টেস্টের সময় বাইরের সিস্টেমের উপর নির্ভরশীলতা কমায় এবং শুধুমাত্র সেই কার্যাবলী পরীক্ষা করতে সহায়ক হয় যা আপনাকে প্রয়োজন। Fakes আসল সিস্টেমের আচরণ অনুকরণ করে, যেখানে Spies মেথড কল বা কার্যকলাপ ট্র্যাক করে। Fakes সাধারণত কাস্টম সিস্টেম তৈরিতে ব্যবহার হয়, এবং Spies মেথড কলের ব্যবহার বা আচরণ যাচাই করতে ব্যবহৃত হয়।

Content added By
Promotion

Are you sure to start over?

Loading...