Replay Mode এ Mock Execution

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

414

EasyMock একটি জনপ্রিয় mocking framework যা Java টেস্টিংয়ের জন্য ব্যবহৃত হয়। যখন আমরা মক অবজেক্ট তৈরি করি, তখন মক অবজেক্টগুলি expectation সেট করতে সাহায্য করে, তবে এই এক্সপেকটেশনগুলি শুধুমাত্র তখন কার্যকর হয় যখন আমরা মক অবজেক্টে replay mode এ চলে আসি। Replay Mode হল সেই অবস্থা যেখানে মক অবজেক্টের জন্য নির্ধারিত expectations কার্যকরী হয়, এবং আসল অবজেক্টের মতো আচরণ করতে শুরু করে।

এই টিউটোরিয়ালে আমরা EasyMockreplay mode এবং মক এক্সিকিউশন সম্পর্কে বিস্তারিত আলোচনা করব।


1. Replay Mode কী?

Replay Mode হল EasyMock এর একটি অবস্থা যেখানে আপনি মক অবজেক্টে যে expectations সেট করেছেন, তা কার্যকরী হবে। এটি নিশ্চিত করে যে মক অবজেক্টটি সেই আচরণে কাজ করবে যেটি আপনি টেস্টের আগে সংজ্ঞায়িত করেছেন। replay() মেথডটি কল করার পর, মক অবজেক্টটি expectations অনুযায়ী কার্যকরী হয়।

2. Replay Mode এ Mock Execution Process

মক অবজেক্টে expectations সেট করা হয় এবং পরে replay() মেথড ব্যবহার করে এই এক্সপেকটেশনগুলো কার্যকর করা হয়। মক অবজেক্টে replay() কল করার আগে, এক্সপেকটেশনগুলো expect() এবং andReturn() দিয়ে সংজ্ঞায়িত করা হয়।

3. Replay Mode Flow

  1. Create Mock Object: প্রথমে মক অবজেক্ট তৈরি করা হয়।
  2. Set Expectations: মক অবজেক্টের উপর এক্সপেকটেশন নির্ধারণ করা হয় (যেমন, কোন মেথড কল হবে এবং তা কী রিটার্ন করবে)।
  3. Activate Replay Mode: replay() মেথড ব্যবহার করে মক অবজেক্টের replay mode সক্রিয় করা হয়, যাতে এটি expectations অনুসারে আচরণ করে।
  4. Execute Mocks: মক অবজেক্টে নির্ধারিত এক্সপেকটেশন অনুযায়ী মেথডগুলি কল করা হয়।
  5. Verify Mocks: মক অবজেক্টের উপর নির্ধারিত এক্সপেকটেশন সঠিকভাবে কাজ করেছে কিনা তা যাচাই করার জন্য verify() মেথড ব্যবহার করা হয়।

4. Replay Mode Example in EasyMock

ধরা যাক, আমাদের একটি CalculatorService ক্লাস আছে এবং আমরা তার add() মেথডের জন্য একটি মক অবজেক্ট তৈরি করতে চাই। আমরা চাই যে, যদি দুটি সংখ্যা যোগ করা হয়, তাহলে এটি সঠিকভাবে ফলাফল প্রদান করবে।

4.1. Basic Example of Replay Mode

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

interface CalculatorService {
    int add(int a, int b);
}

public class ReplayModeExample {

    @Test
    public void testAddMethod() {
        // 1. Create mock object
        CalculatorService calculatorMock = EasyMock.createMock(CalculatorService.class);

        // 2. Set expectations
        EasyMock.expect(calculatorMock.add(10, 20)).andReturn(30);  // expect add() to return 30 when 10 and 20 are added

        // 3. Activate replay mode
        EasyMock.replay(calculatorMock);

        // 4. Execute mock method
        int result = calculatorMock.add(10, 20);

        // 5. Verify the result
        assertEquals(30, result);

        // 6. Verify that the mock method was called correctly
        EasyMock.verify(calculatorMock);
    }
}

ব্যাখ্যা:

  1. Create Mock Object: EasyMock.createMock(CalculatorService.class) ব্যবহার করে আমরা CalculatorService এর জন্য মক অবজেক্ট তৈরি করেছি।
  2. Set Expectations: EasyMock.expect() এবং andReturn() এর মাধ্যমে আমরা add(10, 20) মেথডের জন্য এক্সপেকটেশন সেট করেছি, যাতে এটি 30 রিটার্ন করে।
  3. Activate Replay Mode: EasyMock.replay(calculatorMock) মেথডটি কল করে আমরা মক অবজেক্টে replay mode সক্রিয় করেছি।
  4. Execute Mocks: এরপর আমরা add(10, 20) মেথড কল করেছি, যা মক অবজেক্টে নির্ধারিত এক্সপেকটেশন অনুসারে 30 রিটার্ন করবে।
  5. Verify Mocks: EasyMock.verify(calculatorMock) ব্যবহার করে নিশ্চিত করেছি যে add(10, 20) মেথডটি ঠিকভাবে কল হয়েছে।

আউটপুট:

Test passed successfully.

5. Multiple Expectations and Replay Mode

আমরা একাধিক মেথড কলের জন্য একাধিক এক্সপেকটেশনও সেট করতে পারি। নিচে একটি উদাহরণ দেওয়া হল যেখানে দুটি মেথডের জন্য এক্সপেকটেশন সেট করা হয়েছে।

5.1. Multiple Expectations Example

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

interface CalculatorService {
    int add(int a, int b);
    int subtract(int a, int b);
}

public class MultipleExpectationsExample {

    @Test
    public void testMultipleMethodCalls() {
        // 1. Create mock object
        CalculatorService calculatorMock = EasyMock.createMock(CalculatorService.class);

        // 2. Set expectations for multiple method calls
        EasyMock.expect(calculatorMock.add(10, 20)).andReturn(30);
        EasyMock.expect(calculatorMock.subtract(20, 10)).andReturn(10);

        // 3. Activate replay mode
        EasyMock.replay(calculatorMock);

        // 4. Execute mock methods
        int addResult = calculatorMock.add(10, 20);
        int subtractResult = calculatorMock.subtract(20, 10);

        // 5. Verify the results
        assertEquals(30, addResult);
        assertEquals(10, subtractResult);

        // 6. Verify that the mock methods were called correctly
        EasyMock.verify(calculatorMock);
    }
}

ব্যাখ্যা:

  • এখানে CalculatorService ইন্টারফেসে দুটি মেথড রয়েছে: add() এবং subtract()
  • EasyMock.expect() এর মাধ্যমে দুটি মেথডের জন্য এক্সপেকটেশন সেট করা হয়েছে।
  • replay() মেথডটি সক্রিয় করার পর, আমরা add(10, 20) এবং subtract(20, 10) মেথড কল করেছি এবং তাদের ফলাফল যাচাই করেছি।
  • verify() মেথডের মাধ্যমে নিশ্চিত করেছি যে মক অবজেক্টে নির্ধারিত এক্সপেকটেশন অনুযায়ী মেথডগুলি কল হয়েছে।

আউটপুট:

Test passed successfully.

6. Exception Handling with Replay Mode

EasyMock এ exception handling এর জন্য আমরা andThrow() মেথড ব্যবহার করে মক অবজেক্টে এক্সেপশন থ্রো করতে পারি। Replay Mode এর সময় এই এক্সেপশনটি কার্যকরী হবে।

6.1. Exception Handling in Replay Mode Example

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

class PaymentService {
    public void processPayment(int amount) throws IllegalArgumentException {
        if (amount <= 0) {
            throw new IllegalArgumentException("Amount must be positive");
        }
        System.out.println("Payment of " + amount + " processed.");
    }
}

public class ExceptionHandlingExample {

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

        // Set expectation to throw exception when amount is zero or negative
        EasyMock.expect(paymentServiceMock.processPayment(0)).andThrow(new IllegalArgumentException("Amount must be positive"));

        // Activate replay mode
        EasyMock.replay(paymentServiceMock);

        // Execute mock method
        paymentServiceMock.processPayment(0);

        // Verify the mock interaction
        EasyMock.verify(paymentServiceMock);
    }
}

ব্যাখ্যা:

  • PaymentService ক্লাসে processPayment() মেথডে IllegalArgumentException থ্রো করা হয় যদি পরিমাণ শূন্য বা নেতিবাচক হয়।
  • EasyMock.expect() এবং andThrow() ব্যবহার করে আমরা এক্সেপশন থ্রো করার এক্সপেকটেশন সেট করেছি।
  • @Test(expected = IllegalArgumentException.class) অ্যানোটেশনটি নিশ্চিত করেছে যে processPayment(0) কল করার সময় IllegalArgumentException থ্রো হবে।

আউটপুট:

java.lang.IllegalArgumentException: Amount must be positive

Replay Mode হল EasyMock এর একটি গুরুত্বপূর্ণ অংশ, যেখানে মক অবজেক্টের জন্য নির্ধারিত expectations কার্যকরী হয়। replay() মেথড ব্যবহার করার মাধ্যমে মক অবজেক্টের expectations সক্রিয় করা হয়, এবং verify() মেথডের মাধ্যমে যাচাই করা হয় যে, মক অবজেক্টে কল হওয়া মেথডগুলি সঠিকভাবে কাজ করেছে।

  • Exception Handling: আপনি andThrow() মেথড ব্যবহার করে exceptions মক করতে পারেন।
  • Multiple Expectations: একাধিক মেথড এবং এক্সপেকটেশন সেট করা সম্ভব।
  • Replay Mode: মক অবজেক্টে নির্ধারিত expectations কার্যকরী করার জন্য replay() মেথড ব্যবহৃত হয়।

এটি আপনার unit testing কে আরও নমনীয় এবং শক্তিশালী করতে সাহায্য করে।

Content added By
Promotion

Are you sure to start over?

Loading...