Methods এর জন্য Exception থ্রো করা

Exception Handling এবং Mock Object - ইজিমক (EasyMock) - Java Technologies

345

EasyMock একটি জনপ্রিয় mocking framework যা Java-এ ইউনিট টেস্টিংয়ের জন্য ব্যবহৃত হয়। এটি মক অবজেক্ট তৈরি করতে এবং সেগুলির আচরণ সেট করতে ব্যবহৃত হয়। কিছু ক্ষেত্রে, আপনি মক অবজেক্ট থেকে exception থ্রো করার প্রয়োজন হতে পারেন। উদাহরণস্বরূপ, যখন একটি মেথডকে টেস্ট করার সময় আপনি ইচ্ছাকৃতভাবে exception থ্রো করতে চান, যাতে আপনি পরীক্ষা করতে পারেন যে আপনার কোড সঠিকভাবে exception হ্যান্ডলিং করছে কিনা।

EasyMock ব্যবহার করে মক অবজেক্ট থেকে exception থ্রো করার জন্য expect() মেথডের মাধ্যমে andThrow() মেথড ব্যবহার করা হয়।


EasyMock দিয়ে Exception থ্রো করা

Step 1: Method with Exception

ধরা যাক, আপনার একটি Service ক্লাস রয়েছে যার মধ্যে process() মেথড রয়েছে। এই মেথডটি কিছু কিছু পরিস্থিতিতে একটি IOException ফেলে।

public class Service {
    public void process(String input) throws IOException {
        if (input == null) {
            throw new IOException("Input cannot be null");
        }
        // Process logic here
    }
}

Step 2: Test Class with Exception Mocking

এখন, আপনাকে Service ক্লাসের process() মেথডটি মক করতে হবে এবং এর জন্য একটি IOException থ্রো করতে হবে।

import org.easymock.EasyMock;
import org.junit.Test;
import static org.junit.Assert.*;
import java.io.IOException;

public class ServiceTest {

    @Test(expected = IOException.class)  // Expect IOException to be thrown
    public void testProcessWithException() throws IOException {
        // Create a mock object of Service
        Service serviceMock = EasyMock.createMock(Service.class);

        // Set the expectation: process method should throw IOException when input is null
        EasyMock.expect(serviceMock.process(null)).andThrow(new IOException("Input cannot be null"));

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

        // Call the method and expect an exception to be thrown
        serviceMock.process(null);

        // Verify that the expected method was called
        EasyMock.verify(serviceMock);
    }
}

ব্যাখ্যা:

  1. EasyMock.createMock(Service.class): এটি Service ক্লাসের একটি মক অবজেক্ট তৈরি করেছে।
  2. EasyMock.expect(): এটি process() মেথডের জন্য একটি প্রত্যাশা তৈরি করেছে যাতে IOException থ্রো হয় যখন ইনপুট null থাকে।
  3. andThrow(): এটি নিশ্চিত করে যে, process() মেথড কল করা হলে IOException থ্রো হবে।
  4. EasyMock.replay(): এটি মক অবজেক্টে পূর্বনির্ধারিত আচরণ সক্রিয় করে।
  5. EasyMock.verify(): এটি যাচাই করে যে মক অবজেক্টের মেথড কল সঠিকভাবে হয়েছে।
  6. @Test(expected = IOException.class): এই টেস্টে, JUnit নিশ্চিত করবে যে IOException প্রত্যাশিতভাবে থ্রো হয়েছে।

Multiple Exceptions Thrown

আপনি যদি একাধিক exception থ্রো করতে চান, তবে আপনি andThrow() মেথডকে একাধিক exception এর সাথে চেইন করতে পারেন।

উদাহরণ:

@Test
public void testMultipleExceptions() throws IOException {
    // Create a mock object of Service
    Service serviceMock = EasyMock.createMock(Service.class);

    // Set the expectation: process method should throw IOException for the first call
    EasyMock.expect(serviceMock.process(null)).andThrow(new IOException("Input cannot be null"))
            .andThrow(new IOException("Another IOException"));

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

    // Call the method and expect the first exception
    try {
        serviceMock.process(null);
    } catch (IOException e) {
        assertEquals("Input cannot be null", e.getMessage());
    }

    // Call the method again and expect the second exception
    try {
        serviceMock.process(null);
    } catch (IOException e) {
        assertEquals("Another IOException", e.getMessage());
    }

    // Verify that the expected method was called
    EasyMock.verify(serviceMock);
}

ব্যাখ্যা:

  • প্রথম process(null) কলের জন্য IOException এর একটি নির্দিষ্ট মেসেজ থ্রো হবে।
  • দ্বিতীয় process(null) কলের জন্য অন্য একটি IOException থ্রো হবে।
  • এইভাবে আপনি একাধিক exception থ্রো করতে পারেন এবং সেগুলির জন্য প্রত্যাশিত মেসেজ যাচাই করতে পারেন।

Different Types of Exceptions

আপনি বিভিন্ন ধরনের exception থ্রো করতে চাইলে, এটি EasyMock এ খুব সহজে করা যায়:

উদাহরণ: বিভিন্ন ধরণের exceptions থ্রো করা

@Test
public void testDifferentExceptions() throws IOException {
    // Create a mock object of Service
    Service serviceMock = EasyMock.createMock(Service.class);

    // Setting up expectations to throw different exceptions
    EasyMock.expect(serviceMock.process("valid")).andReturn(null);  // No exception for valid input
    EasyMock.expect(serviceMock.process(null)).andThrow(new IOException("Input cannot be null"));  // IOException for null input
    EasyMock.expect(serviceMock.process("error")).andThrow(new RuntimeException("Runtime exception"));  // RuntimeException for "error" input

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

    // Testing valid input (no exception)
    serviceMock.process("valid");

    // Testing exception for null input
    try {
        serviceMock.process(null);
    } catch (IOException e) {
        assertEquals("Input cannot be null", e.getMessage());
    }

    // Testing RuntimeException for "error"
    try {
        serviceMock.process("error");
    } catch (RuntimeException e) {
        assertEquals("Runtime exception", e.getMessage());
    }

    // Verify that the expected methods were called
    EasyMock.verify(serviceMock);
}

ব্যাখ্যা:

  • andReturn(): এটি process("valid") মেথডের জন্য ফলস্বরূপ কোনো exception ছাড়াই সাধারণ একটি ভ্যালু প্রদান করে।
  • andThrow(): এটি process(null) এবং process("error") মেথডের জন্য যথাক্রমে IOException এবং RuntimeException থ্রো করে।

সারাংশ

EasyMock এর মাধ্যমে আপনি মক অবজেক্ট থেকে exception থ্রো করতে পারেন, যা ইউনিট টেস্টিংয়ের জন্য গুরুত্বপূর্ণ। expect() এবং andThrow() মেথডের মাধ্যমে মক অবজেক্টের জন্য বিভিন্ন ধরণের exception প্রক্ষেপণ করা যায়। এটি বিশেষভাবে গুরুত্বপূর্ণ যখন আপনি সিস্টেমের exception handling পরীক্ষা করতে চান এবং নিশ্চিত করতে চান যে সঠিক exception handling মেকানিজম কাজ করছে কিনা।

Content added By
Promotion

Are you sure to start over?

Loading...