Method Call এর জন্য Exception থ্রো করা

Behavior বা Expectation সেট করা - ইজিমক (EasyMock) - Java Technologies

380

EasyMock এ আপনি mock objects ব্যবহার করে মক মেথডের জন্য exception থ্রো করতে পারেন। এটি তখন উপকারী হয় যখন আপনি কোনো নির্দিষ্ট মেথডের জন্য নির্দিষ্ট exception সিমুলেট করতে চান, যেমন ব্যতিক্রমী পরিস্থিতি পরীক্ষা করার জন্য। এই ধরনের টেস্টিং exception handling এর কার্যকারিতা নিশ্চিত করতে সহায়ক হয়।

EasyMock এ Exception থ্রো করার প্রক্রিয়া:

EasyMock এর মাধ্যমে একটি মক অবজেক্ট তৈরি করার সময়, আপনি expect() মেথডের সাথে andThrow() ব্যবহার করে মেথড কলের জন্য একটি exception নির্ধারণ করতে পারেন। এর মাধ্যমে আপনি নির্দিষ্ট পরিস্থিতিতে মেথড কল করার সময় বিশেষ কোনো exception থ্রো করার আচরণ সিমুলেট করতে পারেন।

ধাপ:

  1. Mock Object তৈরি: createMock() ব্যবহার করে একটি মক অবজেক্ট তৈরি করুন।
  2. Expectation Setup: expect() ব্যবহার করে নির্দিষ্ট মেথড কলের জন্য একটি exception থ্রো করার জন্য andThrow() ব্যবহার করুন।
  3. Replay Mode: replay() মেথড দিয়ে মক অবজেক্টে নির্ধারিত আচরণ চালু করুন।
  4. Exception Handling: try-catch ব্লক ব্যবহার করে টেস্টের মধ্যে exception হ্যান্ডেল করুন।

উদাহরণ: EasyMock এ Method Call এর জন্য Exception থ্রো করা

ধরা যাক, আমাদের একটি BankService ক্লাস আছে, যা BankAccount ক্লাসের উপর নির্ভরশীল। আমাদের লক্ষ্য হল, BankService এর withdraw() মেথডের জন্য InsufficientFundsException তৈরি করা এবং তা পরীক্ষা করা।

১. BankAccount ক্লাস (Dependency)

public class BankAccount {
    private int balance;

    public BankAccount(int balance) {
        this.balance = balance;
    }

    public int getBalance() {
        return balance;
    }

    public void withdraw(int amount) throws InsufficientFundsException {
        if (amount > balance) {
            throw new InsufficientFundsException("Insufficient funds to withdraw " + amount);
        }
        balance -= amount;
    }
}

২. BankService ক্লাস (Class Under Test)

public class BankService {
    private BankAccount bankAccount;

    public BankService(BankAccount bankAccount) {
        this.bankAccount = bankAccount;
    }

    public String processWithdrawal(int amount) {
        try {
            bankAccount.withdraw(amount);
            return "Withdrawal successful";
        } catch (InsufficientFundsException e) {
            return e.getMessage();
        }
    }
}

৩. InsufficientFundsException

public class InsufficientFundsException extends Exception {
    public InsufficientFundsException(String message) {
        super(message);
    }
}

৪. EasyMock এর মাধ্যমে Unit Test

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

public class BankServiceTest {

    @Test
    public void testWithdrawWithInsufficientFunds() throws Exception {
        // Create a mock of BankAccount
        BankAccount mockBankAccount = createMock(BankAccount.class);

        // Set up the expectation: when withdraw is called with amount 100, throw InsufficientFundsException
        expect(mockBankAccount.withdraw(100)).andThrow(new InsufficientFundsException("Insufficient funds to withdraw 100"));
        
        // Switch the mock object to replay mode
        replay(mockBankAccount);

        // Create BankService with the mock BankAccount
        BankService bankService = new BankService(mockBankAccount);

        // Call the method under test
        String result = bankService.processWithdrawal(100);

        // Assert that the correct exception message is returned
        assertEquals("Insufficient funds to withdraw 100", result);

        // Verify the behavior of the mock object
        verify(mockBankAccount);
    }
}

ব্যাখ্যা:

  1. Mock Object Creation: createMock(BankAccount.class) ব্যবহার করে BankAccount ক্লাসের একটি মক অবজেক্ট তৈরি করা হয়।
  2. Expectation Setup: expect(mockBankAccount.withdraw(100)) এর মাধ্যমে আমরা সেট করেছি যে, যখন withdraw(100) কল হবে, তখন InsufficientFundsException থ্রো হবে।
  3. Replay Mode: replay(mockBankAccount) ব্যবহার করে মক অবজেক্টে নির্ধারিত আচরণ চালু করা হয়েছে।
  4. Test Execution: bankService.processWithdrawal(100) কল করা হয়েছে এবং assertEquals() এর মাধ্যমে পরীক্ষা করা হয়েছে যে, InsufficientFundsException মেসেজ সঠিকভাবে রিটার্ন হচ্ছে কিনা।

Test Case:

  • Input: 100 টাকা উত্তোলনের চেষ্টা।
  • Expected Output: "Insufficient funds to withdraw 100"
  • Explanation: কারণ মক অবজেক্টে withdraw(100) কল করার জন্য InsufficientFundsException থ্রো করা হয়েছে, তাই ফলস্বরূপ এই মেসেজটি রিটার্ন হয়।

EasyMock এ Exception Handling এর সুবিধা:

  • Unit Testing: EasyMock ব্যবহার করে আপনি যে মেথডটি পরীক্ষা করছেন তার জন্য নির্দিষ্ট exception সিমুলেট করতে পারেন।
  • Error Scenarios Testing: বাস্তব জীবনে যখন exception ঘটবে, তখন সেটি সঠিকভাবে পরিচালিত হচ্ছে কিনা তা পরীক্ষা করা সহজ হয়।
  • Cleaner Tests: Mocking এর মাধ্যমে আপনি বাহ্যিক নির্ভরশীলতা বা অবজেক্টের আচরণ পরিবর্তন না করে, একাধিক exception scenario পরীক্ষা করতে পারেন।

EasyMock এর সীমাবদ্ধতা:

  • Overhead in Complex Scenarios: জটিল exception handling সিস্টেমে মকিংয়ের জন্য অতিরিক্ত কনফিগারেশন প্রয়োজন হতে পারে।
  • Harder to Set Up: কিছু ক্ষেত্রে, একাধিক exception scenario সিমুলেট করার জন্য EasyMock কিছুটা জটিল হতে পারে, বিশেষত যখন একাধিক mock objects ব্যবহৃত হয়।

সারাংশ

EasyMock ব্যবহার করে আপনি একটি মক অবজেক্টে exception থ্রো করতে পারেন, যা আপনাকে unit testing এর সময় নির্দিষ্ট exception scenarios সিমুলেট করতে সাহায্য করে। এটি error handling এবং exception management পরীক্ষার জন্য খুবই উপকারী। EasyMock এর মাধ্যমে আপনি নির্দিষ্ট মেথড কলের জন্য exception থ্রো করতে পারেন এবং সেই অনুযায়ী আপনার কোডের আচরণ যাচাই করতে পারেন।

Content added By
Promotion

Are you sure to start over?

Loading...