Exact এবং Range-Based Verification (times(), atLeast(), atMost())

Mock Object Verification - ইজিমক (EasyMock) - Java Technologies

425

EasyMock একটি জনপ্রিয় mocking framework যা unit testing তে ব্যবহৃত হয়। এটি টেস্টিংয়ের সময় মক অবজেক্টের আচরণ নির্ধারণ করতে এবং সেই আচরণের উপর ভিত্তি করে verification করতে সাহায্য করে। Exact এবং Range-Based Verification হল সেই ধরনের বৈশিষ্ট্য, যার মাধ্যমে আপনি নিশ্চিত করতে পারেন যে একটি নির্দিষ্ট মেথড কতবার এবং কখন কল হয়েছে।

EasyMock এ verification করার জন্য তিনটি সাধারণ মেথড ব্যবহৃত হয়:

  • times()
  • atLeast()
  • atMost()

এই মেথডগুলি method call এর সংখ্যা যাচাই করার জন্য ব্যবহার করা হয়, যা আপনার টেস্টের উদ্দেশ্য অনুযায়ী উপযুক্ত হতে পারে।


1. Exact Verification (times())

Exact Verification এর মাধ্যমে আপনি যাচাই করতে পারেন যে একটি নির্দিষ্ট মেথড কতবার কল করা হয়েছে। times() মেথডটি এই যাচাইয়ের জন্য ব্যবহার করা হয়। এটি নিশ্চিত করে যে মক অবজেক্টের নির্দিষ্ট মেথডটি নির্দিষ্ট সংখ্যক বার কল হয়েছে।

1.1. Exact Verification Example (times())

import org.easymock.EasyMock;
import org.junit.Test;
import static org.junit.Assert.*;

class PaymentService {
    public void processPayment(int amount) {
        System.out.println("Payment of " + amount + " processed.");
    }
}

public class ExactVerificationExample {

    @Test
    public void testExactVerification() {
        // Create mock object
        PaymentService paymentServiceMock = EasyMock.createMock(PaymentService.class);

        // Define the expected behavior
        paymentServiceMock.processPayment(100);
        EasyMock.expectLastCall().times(2); // Expect processPayment to be called exactly twice

        // Activate the mock
        EasyMock.replay(paymentServiceMock);

        // Use the mock
        paymentServiceMock.processPayment(100);
        paymentServiceMock.processPayment(100);

        // Verify that the mock method was called exactly twice
        EasyMock.verify(paymentServiceMock);
    }
}

ব্যাখ্যা:

  • expectLastCall().times(2): এখানে processPayment(100) মেথডটি দ্বিবার কল হওয়ার জন্য নির্ধারণ করা হয়েছে। যদি এটি একবার বা তিনবার কল হয়, তবে টেস্টটি ব্যর্থ হবে।
  • verify(paymentServiceMock): এটি যাচাই করে যে মক অবজেক্টের processPayment() মেথডটি নির্ধারিত সংখ্যক বার কল হয়েছে।

আউটপুট:

Payment of 100 processed.
Payment of 100 processed.

2. Range-Based Verification

Range-Based Verification এর মাধ্যমে আপনি নিশ্চিত করতে পারেন যে একটি নির্দিষ্ট মেথড কতবার কল হয়েছে, এবং একটি নির্দিষ্ট পরিসীমা (range) এর মধ্যে এটি হওয়া উচিত। এতে তিনটি মেথড ব্যবহৃত হয়:

  • atLeast(): মেথডটি কমপক্ষে একটি নির্দিষ্ট সংখ্যক বার কল হওয়া উচিত।
  • atMost(): মেথডটি সর্বাধিক একটি নির্দিষ্ট সংখ্যক বার কল হওয়া উচিত।
  • times(): নির্দিষ্ট সংখ্যক বার কল হওয়া উচিত (যেমন পূর্বের উদাহরণে)।

2.1. atLeast() Example

import org.easymock.EasyMock;
import org.junit.Test;
import static org.junit.Assert.*;

public class AtLeastVerificationExample {

    @Test
    public void testAtLeastVerification() {
        // Create mock object
        PaymentService paymentServiceMock = EasyMock.createMock(PaymentService.class);

        // Define the expected behavior
        paymentServiceMock.processPayment(100);
        EasyMock.expectLastCall().atLeastOnce(); // Expect processPayment to be called at least once

        // Activate the mock
        EasyMock.replay(paymentServiceMock);

        // Use the mock
        paymentServiceMock.processPayment(100);
        paymentServiceMock.processPayment(100); // Call it multiple times

        // Verify that the mock method was called at least once
        EasyMock.verify(paymentServiceMock);
    }
}

ব্যাখ্যা:

  • expectLastCall().atLeastOnce(): এটি নিশ্চিত করে যে processPayment(100) মেথডটি অন্তত একবার কল হয়েছে, তবে এটি আরো বেশি বারও হতে পারে।

আউটপুট:

Payment of 100 processed.
Payment of 100 processed.

2.2. atMost() Example

import org.easymock.EasyMock;
import org.junit.Test;
import static org.junit.Assert.*;

public class AtMostVerificationExample {

    @Test
    public void testAtMostVerification() {
        // Create mock object
        PaymentService paymentServiceMock = EasyMock.createMock(PaymentService.class);

        // Define the expected behavior
        paymentServiceMock.processPayment(100);
        EasyMock.expectLastCall().atMost(3); // Expect processPayment to be called at most 3 times

        // Activate the mock
        EasyMock.replay(paymentServiceMock);

        // Use the mock
        paymentServiceMock.processPayment(100);
        paymentServiceMock.processPayment(100); 
        paymentServiceMock.processPayment(100); // Call it three times

        // Verify that the mock method was called at most 3 times
        EasyMock.verify(paymentServiceMock);
    }
}

ব্যাখ্যা:

  • expectLastCall().atMost(3): এটি নিশ্চিত করে যে processPayment(100) মেথডটি সর্বোচ্চ ৩ বার কল হয়েছে, কিন্তু তার বেশি নয়। যদি এটি ৪ বার কল হয়, তবে টেস্টটি ব্যর্থ হবে।

আউটপুট:

Payment of 100 processed.
Payment of 100 processed.
Payment of 100 processed.

3. Combined Example (times(), atLeast(), atMost())

এখন আমরা times(), atLeast(), এবং atMost() একসঙ্গে ব্যবহার করে একটি উদাহরণ দেখব:

import org.easymock.EasyMock;
import org.junit.Test;
import static org.junit.Assert.*;

public class CombinedVerificationExample {

    @Test
    public void testCombinedVerification() {
        // Create mock object
        PaymentService paymentServiceMock = EasyMock.createMock(PaymentService.class);

        // Define the expected behavior
        paymentServiceMock.processPayment(100);
        EasyMock.expectLastCall().times(2); // Expect processPayment to be called exactly twice
        
        paymentServiceMock.processPayment(200);
        EasyMock.expectLastCall().atLeastOnce(); // Expect processPayment to be called at least once with amount 200
        
        paymentServiceMock.processPayment(300);
        EasyMock.expectLastCall().atMost(3); // Expect processPayment to be called at most 3 times with amount 300

        // Activate the mock
        EasyMock.replay(paymentServiceMock);

        // Using the mock
        paymentServiceMock.processPayment(100);
        paymentServiceMock.processPayment(100);
        
        paymentServiceMock.processPayment(200);
        paymentServiceMock.processPayment(300);
        paymentServiceMock.processPayment(300);

        // Verify that the mock methods were called the expected number of times
        EasyMock.verify(paymentServiceMock);
    }
}

ব্যাখ্যা:

  • times(2): এটি নিশ্চিত করে যে processPayment(100) মেথডটি ঠিক দুইবার কল হয়েছে।
  • atLeastOnce(): এটি নিশ্চিত করে যে processPayment(200) কমপক্ষে একবার কল হয়েছে।
  • atMost(3): এটি নিশ্চিত করে যে processPayment(300) সর্বোচ্চ তিনবার কল হয়েছে।

আউটপুট:

Payment of 100 processed.
Payment of 100 processed.
Payment of 200 processed.
Payment of 300 processed.
Payment of 300 processed.

EasyMock এর Exact এবং Range-Based Verification (times(), atLeast(), atMost()) এর মাধ্যমে আপনি মক অবজেক্টের আচরণ এবং মেথড কলের সংখ্যা যাচাই করতে পারেন। এটি নিশ্চিত করতে সহায়ক যে, একটি নির্দিষ্ট মেথড কতবার কল হয়েছে এবং তা আপনার টেস্টের উদ্দেশ্যের সাথে মেলে কিনা।

  • times(): নির্দিষ্ট সংখ্যক বার কল হওয়া উচিত।
  • atLeast(): কমপক্ষে একটি নির্দিষ্ট সংখ্যক বার কল হওয়া উচিত।
  • atMost(): সর্বোচ্চ একটি নির্দিষ্ট সংখ্যক বার কল হওয়া উচিত।

এই বৈশিষ্ট্যগুলি ব্যবহার করে আপনি মক অবজেক্টের আচরণ আরও নির্ভুলভাবে যাচাই করতে পারবেন, যা unit testing এর একটি গুরুত্বপূর্ণ অংশ।

Content added By
Promotion

Are you sure to start over?

Loading...