Stubs এবং Mocks এর মধ্যে পার্থক্য

Mocking এবং Stubbing - জ্যাসমিনজেএস (JasmineJS) - Web Development

305

JasmineJS এ Stubs এবং Mocks দুটি গুরুত্বপূর্ণ টেস্টিং কৌশল, যা আপনাকে নির্দিষ্ট ফাংশন বা মেথডের আচরণ মক বা নিয়ন্ত্রণ করতে সাহায্য করে। তবে এই দুটি কৌশলের মধ্যে কিছু মৌলিক পার্থক্য রয়েছে, যা তাদের ব্যবহার এবং উদ্দেশ্য আলাদা করে।


Stubs

Stub হল একটি টেস্টিং কৌশল, যা মূলত কোনো ফাংশনের আচরণ প্রতিস্থাপন করে এবং এটি নির্দিষ্ট মান বা ফলাফল প্রদান করে। এটি মূলত সেই ফাংশন বা মেথডের আউটপুটকে নিয়ন্ত্রণ করার জন্য ব্যবহৃত হয়, যাতে করে আপনি টেস্টের মধ্যে অন্যান্য নির্ভরতা এড়িয়ে কেবলমাত্র যে অংশ পরীক্ষা করছেন সেটিকে আলাদা করতে পারেন।

Stub এর বৈশিষ্ট্য:

  • নির্দিষ্ট ফলাফল প্রদান: Stub সাধারণত একটি নির্দিষ্ট মান বা ফলাফল ফেরত দেয়। এটি মূল ফাংশনের আচরণ পরিবর্তন করে এবং টেস্টিং পরিবেশের জন্য এটি নির্ধারিত আউটপুট দেয়।
  • কেবল আউটপুট নিয়ন্ত্রণ: Stub মূলত ফাংশনের আউটপুট নিয়ন্ত্রণ করে, কিন্তু এটি কোনো রেকর্ডিং বা কল হিস্টোরি রাখে না।

উদাহরণ:

describe("stub example", function() {
  it("should return a fixed value", function() {
    var myObject = {
      getData: function() {
        return 10;  // Stubbed function returns a fixed value
      }
    };

    spyOn(myObject, "getData").and.callFake(function() {
      return 5;  // The stubbed method now returns 5 instead of 10
    });

    expect(myObject.getData()).toBe(5);  // Verifying the stubbed value
  });
});

এখানে:

  • spyOn() ফাংশনটি getData মেথডটি স্পাই করার জন্য ব্যবহার করা হয়েছে, এবং callFake() ব্যবহার করে এটি একটি স্টাব ফাংশনে রূপান্তরিত হয়েছে, যা ৫ ফেরত দেয়।
  • স্টাবটি getData() মেথডের আউটপুট পরিবর্তন করে, কিন্তু কোন কল হিস্টোরি রাখে না।

Mocks

Mock হল একটি আরও উন্নত টেস্টিং কৌশল যা শুধু ফাংশনের আউটপুট নিয়ন্ত্রণ করেই শেষ হয় না, বরং এটি সেই ফাংশনটির কল হিস্টোরি এবং আচরণও রেকর্ড করে। মক ব্যবহার করে আপনি টেস্ট করতে পারেন যে কোনো ফাংশন বা মেথড কতবার কল হয়েছে, ঠিক কোন আর্গুমেন্টগুলো দিয়ে কল করা হয়েছে, এবং এর কল হওয়া উচিত কিনা।

Mock এর বৈশিষ্ট্য:

  • ফাংশনের কল হিস্টোরি: Mock ফাংশনটি কল হওয়া বা না হওয়া, কতবার কল হয়েছে এবং এর আর্গুমেন্ট কী ছিল—এই সমস্ত তথ্য রেকর্ড করে।
  • আউটপুট এবং আচরণ নিয়ন্ত্রণ: Mock কেবল আউটপুট নয়, ফাংশনের আচরণ এবং কল হিস্টোরিও নিয়ন্ত্রণ করে।
  • অটোমেটিক ভ্যালিডেশন: মক সাধারণত স্বয়ংক্রিয়ভাবে যাচাই করে যে টেস্টের সময়ে ফাংশনটি কতবার এবং কিভাবে কল হয়েছে।

উদাহরণ:

describe("mock example", function() {
  it("should track how many times a method is called", function() {
    var myObject = {
      processData: function(value) {
        return value * 2;
      }
    };

    spyOn(myObject, "processData").and.callFake(function(value) {
      return value * 3;  // Mock method returns value * 3
    });

    myObject.processData(5);
    myObject.processData(10);

    expect(myObject.processData).toHaveBeenCalled();  // Verifying that the mock method was called
    expect(myObject.processData).toHaveBeenCalledTimes(2);  // Verifying it was called twice
    expect(myObject.processData).toHaveBeenCalledWith(5);  // Verifying it was called with the argument 5
  });
});

এখানে:

  • spyOn() ব্যবহার করা হয়েছে processData মেথডটি মক করার জন্য এবং callFake() দিয়ে মক ফাংশনটি তৈরি করা হয়েছে।
  • toHaveBeenCalled() এবং toHaveBeenCalledTimes() এর মাধ্যমে মক ফাংশনটির কল হিস্টোরি যাচাই করা হচ্ছে।
  • toHaveBeenCalledWith() যাচাই করে যে ফাংশনটি নির্দিষ্ট আর্গুমেন্ট সহ কল হয়েছে।

Stubs এবং Mocks এর মধ্যে পার্থক্য

বৈশিষ্ট্যStubMock
ফাংশন আচরণStub শুধুমাত্র আউটপুট নিয়ন্ত্রণ করে।Mock আউটপুট, কল হিস্টোরি, এবং আচরণ নিয়ন্ত্রণ করে।
কল হিস্টোরিকল হিস্টোরি রেকর্ড করে না।কল হিস্টোরি রেকর্ড করে, যেমন কতবার কল হয়েছে।
ব্যবহারফাংশনের আউটপুট পরীক্ষার জন্য ব্যবহৃত হয়।ফাংশনটির কল এবং আচরণ পরীক্ষা করার জন্য ব্যবহৃত হয়।
টেস্ট ভ্যালিডেশনভ্যালিডেশন স্বতন্ত্রভাবে করতে হয়।মকটি স্বয়ংক্রিয়ভাবে যাচাই করতে পারে যে ফাংশনটি কতবার কল হয়েছে।
প্রধান উদ্দেশ্যনির্দিষ্ট আউটপুট নিয়ন্ত্রণ।ফাংশনের আচরণ এবং কল হিস্টোরি পরীক্ষা।

সারাংশ

  • Stubs: এগুলি ফাংশনের আউটপুট নিয়ন্ত্রণ করে এবং টেস্টের মধ্যে নির্দিষ্ট ফলাফল প্রদান করে। এগুলোর মূল উদ্দেশ্য ফাংশনের আচরণকে সহজভাবে মক করা।
  • Mocks: এগুলি শুধুমাত্র আউটপুট নয়, ফাংশনের কল হিস্টোরি, আর্গুমেন্ট, এবং কতবার কল হয়েছে এসব সমস্ত তথ্য রেকর্ড করে। এগুলি সাধারণত ফাংশনের আচরণ এবং কল হিস্টোরি পরীক্ষা করতে ব্যবহৃত হয়।

JasmineJS এ আপনি যেভাবে টেস্ট করছেন তার ওপর ভিত্তি করে এই দুটি কৌশল ব্যবহার করতে পারেন—যেখানে স্টাবটি আউটপুট নিয়ন্ত্রণে ব্যবহার হবে এবং মকটি কল হিস্টোরি এবং আচরণ যাচাই করার জন্য ব্যবহৃত হবে।

Content added By
Promotion

Are you sure to start over?

Loading...