spy এবং double এর ব্যবহার

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

389

RSpec এ spy এবং double হল টেস্টিং-এর অংশ যা বাহ্যিক ডিপেন্ডেন্সি এবং মডিউল বা ক্লাসের আচরণ যাচাই করার জন্য ব্যবহৃত হয়। এগুলি Mocking এবং Stubbing কৌশলের অন্তর্গত এবং বিশেষত Unit Testing এবং Isolation Testing-এ গুরুত্বপূর্ণ ভূমিকা পালন করে।


1. Double

Double হল এমন একটি অবজেক্ট যা কোনও মেথড বা কনস্ট্রাক্টর কলকে সিমুলেট করে। এটি মূলত একটি fake object, যা কোনও নির্দিষ্ট আচরণ বা মেথডের আউটপুট নির্দিষ্টভাবে তৈরি করতে ব্যবহৃত হয়।

Double এর ব্যবহার:

  1. Stubbing: কোনও মেথড কলের আউটপুট নির্ধারণ করা।
  2. Behavior Verification: মেথডটি একটি নির্দিষ্ট আচরণ অনুসরণ করছে কিনা তা যাচাই করা।

উদাহরণ:

ধরা যাক, আপনার একটি Order মডেল আছে যা একটি PaymentGateway ক্লাস ব্যবহার করে পেমেন্ট প্রক্রিয়া করতে:

class Order
  def initialize(payment_gateway)
    @payment_gateway = payment_gateway
  end

  def process_payment(amount)
    @payment_gateway.charge(amount)
  end
end

এখন, আপনি PaymentGateway ক্লাসের জন্য একটি double ব্যবহার করতে পারেন, যাতে আপনি তার আচরণ পরীক্ষা করতে পারেন, তবে আসল পেমেন্ট গেটওয়ের কার্যকারিতা চালনা করবেন না:

RSpec.describe Order do
  it "processes payment correctly" do
    # Double তৈরি করা হয়েছে PaymentGateway এর জন্য
    payment_gateway_double = double("PaymentGateway")
    
    # PaymentGateway.double এর charge মেথডে স্টাব করা হয়েছে
    allow(payment_gateway_double).to receive(:charge).with(100).and_return(true)
    
    order = Order.new(payment_gateway_double)
    
    # Order-এ পেমেন্ট প্রসেস করা হচ্ছে এবং charge মেথডটি পরীক্ষা করা হচ্ছে
    expect(order.process_payment(100)).to eq(true)
    
    # charge মেথডটি সত্যি কার্যকর হয়েছে কিনা তা নিশ্চিত করা হচ্ছে
    expect(payment_gateway_double).to have_received(:charge).with(100)
  end
end

এখানে:

  • double("PaymentGateway"): এটি একটি fake object তৈরি করেছে যা PaymentGateway ক্লাসের মত আচরণ করবে।
  • allow(payment_gateway_double).to receive(:charge): আমরা charge মেথডকে স্টাব করেছি, যাতে এটি 100 পেমেন্ট পাওয়ার পর true রিটার্ন করে।

2. Spy

Spy হল একটি বিশেষ ধরনের double যা বাস্তবিক মেথড কলগুলির উপর নজর রাখে। এটি method calls বা state পরিবর্তনগুলিকে ট্র্যাক করে, এবং টেস্ট শেষে যাচাই করা যায় মেথডটি ঠিকভাবে কল করা হয়েছে কিনা।

Spy এর ব্যবহার:

  1. Method Call Verification: এটি মেথড কল হয়েছে কিনা বা কতবার হয়েছে তা যাচাই করতে ব্যবহৃত হয়।
  2. State Verification: এটি স্টেট পরিবর্তন করেছে কিনা যাচাই করতে ব্যবহৃত হয়।

উদাহরণ:

ধরা যাক, আপনার একটি UserNotifier ক্লাস আছে যা একটি ইমেইল পাঠানোর কাজ করে, এবং আপনি নিশ্চিত করতে চান যে send_email মেথডটি একাধিক বার কল হয়েছে:

class UserNotifier
  def send_email(user)
    # ইমেইল পাঠানোর লজিক
  end
end

এখন, আপনি এই মেথডের উপর spy ব্যবহার করতে পারেন:

RSpec.describe UserNotifier do
  it "calls send_email once" do
    user_notifier = spy("UserNotifier")
    
    # Spy করে send_email মেথডে কল করা
    user_notifier.send_email("user@example.com")
    
    # মেথডটি একবার কল হয়েছে কিনা যাচাই
    expect(user_notifier).to have_received(:send_email).with("user@example.com")
  end
end

এখানে:

  • spy("UserNotifier"): এটি একটি spy object তৈরি করেছে, যা UserNotifier ক্লাসের আচরণ নকল করে এবং মেথড কলের জন্য নজর রাখে।
  • have_received(:send_email): এটি যাচাই করবে যে send_email মেথডটি সঠিকভাবে কল হয়েছে কিনা এবং কী আর্গুমেন্টের সাথে।

Double এবং Spy এর মধ্যে পার্থক্য

প্যারামিটারDoubleSpy
ব্যবহারকোনও মেথড বা ক্লাসের আচরণ সিমুলেট করেমেথড কল এবং স্টেট পরিবর্তন ট্র্যাক করে
মূল উদ্দেশ্যমেথডের আউটপুট স্টাব করা এবং একটি fake object তৈরি করামেথড কল যাচাই করা এবং রেকর্ড করা
মেথড কল ট্র্যাকিংনা, এটি মেথড স্টাবিং-এর জন্য ব্যবহৃত হয়হ্যাঁ, এটি মেথড কলের সংখ্যা এবং আর্গুমেন্ট ট্র্যাক করে
স্টেট ট্র্যাকিংনাহ্যাঁ, এটি অবজেক্টের স্টেট পরিবর্তনও ট্র্যাক করে
তৈরি করাdouble("ObjectName")spy("ObjectName")

কোথায় Double এবং Spy ব্যবহার করবেন

  • Double ব্যবহার করা উচিত যখন:
    • আপনি একটি বাহ্যিক ডিপেন্ডেন্সি বা অবজেক্টের আচরণ সিমুলেট করতে চান।
    • আপনি মেথডের আউটপুট স্টাব করতে চান, কিন্তু আপনি মেথড কলের উপর নজর রাখতে চান না।
  • Spy ব্যবহার করা উচিত যখন:
    • আপনি পরীক্ষা করতে চান যে কোনও মেথড কল করা হয়েছে কিনা, কতবার কল করা হয়েছে, এবং কী আর্গুমেন্ট ব্যবহার করা হয়েছে।
    • আপনি বাস্তব অবজেক্ট বা মেথডের উপর নজর রাখতে চান, কিন্তু সেই মেথডের আচরণ পরিবর্তন না করে।

সারাংশ

  • Double হল একটি ফেক অবজেক্ট যা স্টাবিং এবং ফাংশনালিটি সিমুলেট করতে ব্যবহৃত হয়।
  • Spy হল একটি বিশেষ ধরনের ফেক অবজেক্ট যা মেথড কল এবং স্টেট পরিবর্তন ট্র্যাক করে, এবং এটি ব্যবহৃত হয় মেথড কলের পরীক্ষার জন্য।
  • উভয়ই Mocking এবং Stubbing কৌশলের অংশ এবং Unit Testing-এ গুরুত্বপূর্ণ ভূমিকা পালন করে।
Content added By
Promotion

Are you sure to start over?

Loading...