Mocking এর ভূমিকা এবং প্রয়োজনীয়তা

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

296

Mocking হল টেস্টিং এর একটি গুরুত্বপূর্ণ কৌশল যা পরীক্ষার সময় নির্দিষ্ট অংশগুলোর আচরণ নকল (simulate) করার জন্য ব্যবহৃত হয়। JasmineJS এ mocking ব্যবহৃত হয় মূলত সিস্টেম বা অ্যাপ্লিকেশনের বিভিন্ন বাইরের সিস্টেম বা ডিপেনডেন্সি যেমন API কল, ডাটাবেজ অপারেশন, থার্ড-পার্টি লাইব্রেরি, ইত্যাদি পরীক্ষার জন্য। এর মাধ্যমে আপনি নির্দিষ্ট অংশগুলোর আচরণ নির্ধারণ করতে পারেন, যা মূল কোডের কার্যকারিতা বা আচরণকে প্রভাবিত না করে নির্দিষ্ট লজিক পরীক্ষা করার সুযোগ দেয়।

Mocking টেস্টিং এর সময় অপরিহার্য কারণ এটি কোডের নির্ভরশীলতাগুলোর পরিবর্তে আপনার টেস্ট কেসগুলোকে এক্সিকিউট করতে সহায়তা করে। এর মাধ্যমে টেস্টগুলো দ্রুত, নির্ভরযোগ্য এবং পুনরাবৃত্তি যোগ্য হয়ে ওঠে।


Mocking এর ভূমিকা

Mocking এর মাধ্যমে আপনি এমন ডিপেনডেন্সি গুলি ব্যবহার করতে পারেন, যা প্রকৃতপক্ষে পুরো সিস্টেমের সাথে যুক্ত নয়, তবে টেস্ট করার জন্য গুরুত্বপূর্ণ। এটি মূলত দুটি উদ্দেশ্যে ব্যবহৃত হয়:

  1. ডিপেনডেন্সি আইসোলেশন (Dependency Isolation): আপনার টেস্ট শুধুমাত্র একটি নির্দিষ্ট ইউনিট বা ফাংশনকে পরীক্ষা করবে, অন্য কোনো বাহ্যিক ফ্যাক্টরের প্রভাব ছাড়া।
  2. পারফরম্যান্স উন্নয়ন (Performance Improvement): বাইরের সিস্টেম বা ডিপেনডেন্সির সাথে বাস্তব যোগাযোগ করার চেয়ে নকল (mock) ব্যবহার করলে টেস্ট দ্রুত চলে।

উদাহরণ:

ধরা যাক, আপনি একটি ফাংশন পরীক্ষা করতে চান যা একটি API থেকে ডেটা নিয়ে কাজ করে। কিন্তু API কলটি বাস্তবায়ন করতে সময় নিতে পারে বা আপনার টেস্ট পরিবেশে সেটি অ্যাক্সেসযোগ্য নাও হতে পারে। এ ক্ষেত্রে আপনি API কলটি মক (mock) করতে পারেন।


Mocking এর প্রয়োজনীয়তা

বাইরের নির্ভরশীলতা (External Dependencies)

প্রায়ই কোডের কিছু অংশ বাইরের সিস্টেমের উপর নির্ভর করে থাকে, যেমন:

  • API কল
  • ডাটাবেজ ইন্টারঅ্যাকশন
  • ফাইল সিস্টেম অপারেশন
  • থার্ড-পার্টি লাইব্রেরি ইত্যাদি

যখন আপনি টেস্ট করেন, তখন এগুলোর আচরণ আপনার টেস্টের ফলাফলে প্রভাব ফেলতে পারে। এগুলোর মধ্যে কোনো সমস্যা থাকলে আপনার টেস্টও ব্যর্থ হতে পারে, যেটি আসলে আপনার কোডের সমস্যা নয়।

Mocking এর মাধ্যমে আপনি এই বাইরের নির্ভরশীলতাগুলোর আচরণ "নকল" করতে পারেন, যাতে আপনার টেস্টটি কেবলমাত্র আপনি পরীক্ষা করতে চাওয়া কোডের অংশের উপর নির্ভরশীল থাকে।

উদাহরণ:

ধরা যাক, আপনি একটি ফাংশন পরীক্ষা করতে চান যা ডাটাবেজ থেকে ডেটা পড়বে এবং সেই ডেটা প্রক্রিয়া করবে। কিন্তু ডাটাবেজ অ্যাক্সেস করা খুবই ধীরগতির এবং আপনার টেস্ট পরিবেশে ডাটাবেজ না থাকায়, এই অংশটি নকল করা প্রয়োজন।

describe("Database Interaction", function() {
  it("should return the correct user data", function() {
    const mockDatabase = {
      getUser: function(id) {
        return { id: id, name: "John Doe" };  // মক ডাটাবেজ
      }
    };

    const user = mockDatabase.getUser(1);
    expect(user.name).toBe("John Doe");  // টেস্টের জন্য মক ডাটাবেজ ব্যবহার
  });
});

এখানে, ডাটাবেজের সাথে প্রকৃত যোগাযোগ না করেই আপনি ডাটাবেজের getUser ফাংশনটির আচরণ পরীক্ষা করতে পারছেন।


JasmineJS এ Mocking এর ব্যবহার

JasmineJS এ Mocking করার জন্য কিছু গুরুত্বপূর্ণ ফাংশন এবং কৌশল রয়েছে:

1. Spies (স্পাইস)

JasmineJS এ স্পাইস (spies) ব্যবহার করা হয় মকিংয়ের জন্য। স্পাইস হল এমন ফাংশন যা ফাংশন বা মেথডের আচরণ ট্র্যাক করে, যেমন কবে ফাংশনটি কল হয়েছে, কতবার কল হয়েছে, কোন আর্গুমেন্ট সহ কল হয়েছে এবং রিটার্ন মান কী ছিল।

ব্যবহার:

describe("Spy Example", function() {
  it("should call the function once", function() {
    const spy = jasmine.createSpy("myFunction");
    spy();  // ফাংশনটি কল করা হলো

    expect(spy).toHaveBeenCalled();  // স্পাই চেক করবে যে ফাংশনটি কল হয়েছে
    expect(spy).toHaveBeenCalledTimes(1);  // একবার কল হয়েছে
  });
});

এখানে createSpy() ফাংশনটি একটি স্পাই তৈরি করে, যা পরবর্তীতে পরীক্ষা করতে পারে আপনি কতবার এবং কোন আর্গুমেন্ট সহ ফাংশনটি কল করেছেন।

2. Mock Functions (মক ফাংশন)

JasmineJS এ আপনি মক ফাংশন ব্যবহার করে বাহ্যিক ফাংশন বা মেথডের আচরণ নকল করতে পারেন। আপনি এটি করতে পারেন jasmine.createSpy() ব্যবহার করে।

ব্যবহার:

describe("Mock Function Example", function() {
  it("should mock an API call", function() {
    const mockApiCall = jasmine.createSpy().and.returnValue(Promise.resolve("data"));

    mockApiCall().then(response => {
      expect(response).toBe("data");  // মক API কলের রিটার্ন ভ্যালু পরীক্ষা
    });
  });
});

এখানে, mockApiCall() একটি মক ফাংশন যা একটি প্রমিস রিটার্ন করে, যা আপনি পরীক্ষা করতে পারবেন।

3. Stub Functions (স্টাব ফাংশন)

স্টাব হল একটি বিশেষ ধরনের মক ফাংশন যা নির্দিষ্ট আউটপুট রিটার্ন করে এবং মেথড কলের আচরণ পরিবর্তন করতে পারে।

ব্যবহার:

describe("Stub Example", function() {
  it("should stub a method to return a specific value", function() {
    const object = {
      fetchData: function() {
        return "real data";  // বাস্তব ডেটা
      }
    };

    spyOn(object, 'fetchData').and.returnValue("stubbed data");  // স্টাব করা

    expect(object.fetchData()).toBe("stubbed data");  // স্টাবbed ডেটা পরীক্ষা
  });
});

এখানে fetchData মেথডটি স্টাব করা হয়েছে, যার ফলে এটি "real data" না দিয়ে "stubbed data" রিটার্ন করবে।


সারাংশ

Mocking এর মাধ্যমে আপনি বাইরের ডিপেনডেন্সি ও সিস্টেমকে নকল (simulate) করতে পারেন, যাতে আপনার টেস্ট শুধু আপনার কোডের লজিকের উপর নির্ভর করে। JasmineJS এ স্পাই, মক ফাংশন এবং স্টাব ফাংশন ব্যবহার করে আপনি টেস্টিংয়ের সময় কোডের নির্ভরশীলতা নির্ধারণ করতে পারবেন, যার ফলে টেস্টগুলো আরও দ্রুত, নির্ভরযোগ্য এবং আইসোলেটেড (isolated) হবে।

Mocking এর মাধ্যমে আপনি:

  • বাইরের সিস্টেমের প্রভাব থেকে আপনার কোডকে আলাদা করতে পারেন।
  • কোডের বিভিন্ন অংশের নির্ভরশীলতাগুলো নিয়ন্ত্রণ করতে পারেন।
  • টেস্টের পারফরম্যান্স উন্নত করতে পারেন।

JasmineJS এর মকিং টুলস এবং কৌশলগুলো অ্যাসিঙ্ক্রোনাস কাজের জন্যও খুবই উপযোগী এবং এটা টেস্টিংয়ের কার্যকারিতা উন্নত করতে সহায়তা করে।

Content added By
Promotion

Are you sure to start over?

Loading...