Verification Mode এ Method Call নিশ্চিত করা

Record-Replay Model - ইজিমক (EasyMock) - Java Technologies

340

EasyMock এর মাধ্যমে mock objects তৈরি এবং ব্যবস্থাপনা করা সহজ। একটি mock object এর আচরণ সঠিকভাবে পরীক্ষার জন্য verification mode ব্যবহার করা হয়, যাতে নিশ্চিত করা যায় যে mock objects এর মেথডগুলো সঠিকভাবে নির্ধারিত সংখ্যায় কল হয়েছে। EasyMock এ, মেথডের কলের সংখ্যা এবং আচরণ যাচাই করার জন্য কিছু verification মেথড ব্যবহার করা হয়।

এই গাইডে, আমরা EasyMock এর মাধ্যমে verification mode এ মেথড কলের সংখ্যা নিশ্চিত করার পদ্ধতি আলোচনা করব, এবং দেখব কীভাবে exactly(), atLeastOnce(), atMost() এবং times() ব্যবহার করে মেথড কল নিশ্চিত করা যায়।


1. Verification Mode এর সাথে Method Call নিশ্চিত করা

EasyMock এর verification mode ব্যবহার করে, আপনি mock object এর মেথডগুলির কলের সংখ্যা এবং আচরণ নিশ্চিত করতে পারেন। এখানে কিছু প্রধান verification মেথডের আলোচনা করা হয়েছে:

  • exactly(n): এই মেথডটি নিশ্চিত করে যে নির্দিষ্ট মেথডটি exactly n বার কল হয়েছে।
  • atLeastOnce(): এই মেথডটি নিশ্চিত করে যে মেথডটি কমপক্ষে একবার কল হয়েছে।
  • atMost(n): এই মেথডটি নিশ্চিত করে যে মেথডটি সর্বোচ্চ n বার কল হয়েছে।
  • times(n): এটি নিশ্চিত করে যে মেথডটি n বার কল হয়েছে।

Example: Verification Mode

ধরা যাক, আমাদের একটি PaymentService ইন্টারফেস রয়েছে, যা processPayment মেথডটি প্রক্রিয়া করে এবং আমাদের টেস্টে আমরা চাই এটি একটি নির্দিষ্ট সংখ্যক বার কল হয়েছে কিনা তা নিশ্চিত করতে।

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

public class PaymentServiceTest {
    private PaymentService mockPaymentService;

    @Before
    public void setUp() {
        // Mock object তৈরি
        mockPaymentService = createMock(PaymentService.class);
    }

    @Test
    public void testProcessPayment_ExactlyOnce() {
        // mock object এর প্রত্যাশিত আচরণ নির্ধারণ
        expect(mockPaymentService.processPayment(100.0)).andReturn(true);
        
        // Mock সক্রিয় করা
        replay(mockPaymentService);

        // মেথড কল
        mockPaymentService.processPayment(100.0);

        // verify() মেথডে নিশ্চিত করা যে এটি একবার কল হয়েছে
        verify(mockPaymentService); // exactly once
    }

    @Test
    public void testProcessPayment_AtLeastOnce() {
        // mock object এর প্রত্যাশিত আচরণ নির্ধারণ
        expect(mockPaymentService.processPayment(100.0)).andReturn(true);
        
        // Mock সক্রিয় করা
        replay(mockPaymentService);

        // মেথড কল (কমপক্ষে একবার কল করা হবে)
        mockPaymentService.processPayment(100.0);
        mockPaymentService.processPayment(100.0);

        // verify() মেথডে নিশ্চিত করা যে এটি কমপক্ষে একবার কল হয়েছে
        verify(mockPaymentService); // at least once
    }

    @Test
    public void testProcessPayment_AtMost() {
        // mock object এর প্রত্যাশিত আচরণ নির্ধারণ
        expect(mockPaymentService.processPayment(100.0)).andReturn(true);
        
        // Mock সক্রিয় করা
        replay(mockPaymentService);

        // মেথড কল (সর্বাধিক একবার কল করা হবে)
        mockPaymentService.processPayment(100.0);
        mockPaymentService.processPayment(100.0);

        // verify() মেথডে নিশ্চিত করা যে এটি সর্বাধিক একবার কল হয়েছে
        verify(mockPaymentService); // at most once
    }

    @Test
    public void testProcessPayment_Times() {
        // mock object এর প্রত্যাশিত আচরণ নির্ধারণ
        expect(mockPaymentService.processPayment(100.0)).andReturn(true);
        
        // Mock সক্রিয় করা
        replay(mockPaymentService);

        // মেথড কল (একবার)
        mockPaymentService.processPayment(100.0);

        // verify() মেথডে নিশ্চিত করা যে এটি একবার কল হয়েছে
        verify(mockPaymentService); // called once
    }
}

Explanation:

  1. exactly(n):
    • verify(mockPaymentService) ব্যবহার করা হয়েছে যেখানে নিশ্চিত করা হয়েছে যে processPayment(100.0) একবার কল হয়েছে।
  2. atLeastOnce():
    • এখানে processPayment মেথডটি কমপক্ষে একবার কল করা হয়েছে, এবং verify(mockPaymentService) এর মাধ্যমে নিশ্চিত করা হয়েছে যে এটি একাধিকবার কল করা হয়েছে।
  3. atMost(n):
    • এখানে processPayment মেথডটি সর্বোচ্চ একবার কল করা হয়েছে এবং verify(mockPaymentService) এর মাধ্যমে নিশ্চিত করা হয়েছে যে এটি একবারের বেশি কল হয়নি।
  4. times(n):
    • এখানে processPayment(100.0) মেথডটি একবার কল হওয়া নিশ্চিত করা হয়েছে।

2. Verification Mode এর ব্যবহার:

exactly(n)

exactly(n) ব্যবহার করা হয় যখন আপনি নিশ্চিত করতে চান যে একটি mock মেথড নির্দিষ্ট সংখ্যক বার কল হয়েছে।

expect(mockPaymentService.processPayment(100.0)).andReturn(true);
replay(mockPaymentService);
mockPaymentService.processPayment(100.0);
verify(mockPaymentService); // Exactly once

atLeastOnce()

atLeastOnce() ব্যবহার করা হয় যখন আপনি নিশ্চিত করতে চান যে একটি mock মেথড কমপক্ষে একবার কল হয়েছে। এটি যখন আপনার কাছে একাধিক কল আসবে এবং আপনি চান যে মেথডটি অন্তত একবার কল হোক, তখন এটি ব্যবহার করা হয়।

expect(mockPaymentService.processPayment(100.0)).andReturn(true);
replay(mockPaymentService);
mockPaymentService.processPayment(100.0);
mockPaymentService.processPayment(100.0);
verify(mockPaymentService); // At least once

atMost(n)

atMost(n) ব্যবহার করা হয় যখন আপনি নিশ্চিত করতে চান যে একটি mock মেথড সর্বাধিক n বার কল হয়েছে।

expect(mockPaymentService.processPayment(100.0)).andReturn(true);
replay(mockPaymentService);
mockPaymentService.processPayment(100.0);
mockPaymentService.processPayment(100.0);
verify(mockPaymentService); // At most once

times(n)

times(n) ব্যবহার করা হয় যখন আপনি নিশ্চিত করতে চান যে একটি mock মেথড n বার কল হয়েছে।

expect(mockPaymentService.processPayment(100.0)).andReturn(true);
replay(mockPaymentService);
mockPaymentService.processPayment(100.0);
verify(mockPaymentService); // Called exactly once

EasyMock এর verification mode এর মাধ্যমে আপনি mock objects-এর মেথডগুলো সঠিকভাবে কতবার কল হয়েছে তা নিশ্চিত করতে পারেন। আপনি exactly(n), atLeastOnce(), atMost(n), এবং times(n) মেথডের মাধ্যমে mock method calls এর সংখ্যা যাচাই করতে পারেন। এই verification techniques আপনাকে unit tests এর কার্যকারিতা নিশ্চিত করতে সাহায্য করবে এবং আপনার কোডের সঠিকতা ও নির্ভুলতা পরীক্ষা করতে সুবিধা দিবে।

Content added By
Promotion

Are you sure to start over?

Loading...