Guice এর জন্য Unit Test তৈরি করা

Guice এবং Unit Testing - গুইস (Guice) - Java Technologies

374

Guice একটি dependency injection (DI) ফ্রেমওয়ার্ক হিসেবে খুবই জনপ্রিয়, তবে Guice ব্যবহার করার সময়, ডিপেন্ডেন্সি ইনজেকশনকে সঠিকভাবে টেস্ট করা গুরুত্বপূর্ণ। Guice ব্যবহারের ফলে আপনি যে loose coupling পাবেন, তার ফলে আপনি সহজেই ইউনিট টেস্ট তৈরি করতে পারবেন, কারণ আপনি সহজেই ডিপেন্ডেন্সি গুলো মক (mock) বা স্টাব (stub) করতে পারেন।

এখানে আমরা দেখব কিভাবে Guice-এর সাহায্যে unit testing করা যেতে পারে।


Unit Testing এর জন্য Guice ব্যবহার:

Guice এর জন্য unit tests সাধারণত JUnit ফ্রেমওয়ার্ক ব্যবহার করে লেখা হয়। Guice ইনজেকশন ব্যবহার করে ডিপেন্ডেন্সি সরবরাহ করা হলেও, আপনি একাধিক টেস্ট কেসে একই ডিপেন্ডেন্সি ইনজেক্ট করে কোডের অংশবিশেষ টেস্ট করতে পারেন।

এখানে আমরা JUnit এবং Mockito ব্যবহার করে Guice টেস্টিংয়ের একটি উদাহরণ দেখব।


Step 1: Maven Dependency

প্রথমে, আপনাকে Maven পম ফাইলে Guice, JUnit, এবং Mockito লাইব্রেরিগুলির ডিপেন্ডেন্সি যোগ করতে হবে।

<dependencies>
    <!-- Guice Dependency -->
    <dependency>
        <groupId>com.google.inject</groupId>
        <artifactId>guice</artifactId>
        <version>5.0.1</version> <!-- Guice version -->
    </dependency>

    <!-- JUnit Dependency -->
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-api</artifactId>
        <version>5.7.0</version> <!-- JUnit version -->
        <scope>test</scope>
    </dependency>

    <!-- Mockito Dependency for mocking -->
    <dependency>
        <groupId>org.mockito</groupId>
        <artifactId>mockito-core</artifactId>
        <version>3.7.7</version> <!-- Mockito version -->
        <scope>test</scope>
    </dependency>
</dependencies>

Step 2: Guice Setup এবং Test Class তৈরি করা

এখন, আমরা একটি সহজ Service ক্লাস এবং তার dependency Database তৈরি করব। তারপর আমরা সেই ক্লাসের জন্য টেস্ট কেস তৈরি করব।

Service এবং Database ক্লাস:

public class Database {
    public String getData() {
        return "Real Data";
    }
}

public class Service {
    private final Database database;

    // Constructor Injection
    public Service(Database database) {
        this.database = database;
    }

    public String fetchData() {
        return database.getData();
    }
}

Step 3: Guice Module এবং Injector তৈরি করা

এখন, আমরা Guice Module তৈরি করব, যাতে Service এবং Database ক্লাসের মধ্যে ডিপেন্ডেন্সি ম্যানেজ করা যাবে।

import com.google.inject.AbstractModule;

public class TestModule extends AbstractModule {
    @Override
    protected void configure() {
        bind(Database.class).toInstance(new Database()); // Bind Real Database
    }
}

Step 4: Unit Test তৈরি করা

এখন আমরা JUnit এবং Mockito ব্যবহার করে Guice এর জন্য unit test তৈরি করব। এখানে আমরা Database ক্লাসটি mock করব এবং Service ক্লাসের মেথড টেস্ট করব।

import com.google.inject.*;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;

import static org.junit.jupiter.api.Assertions.assertEquals;

public class ServiceTest {

    private Injector injector;

    @BeforeEach
    public void setUp() {
        // Guice Injector তৈরি
        injector = Guice.createInjector(new TestModule());
    }

    @Test
    public void testFetchData() {
        // Database Mock করা
        Database mockDatabase = Mockito.mock(Database.class);
        Mockito.when(mockDatabase.getData()).thenReturn("Mock Data");

        // Service ইনজেক্ট করা
        Service service = new Service(mockDatabase);

        // ফেচড ডেটা চেক করা
        String result = service.fetchData();
        assertEquals("Mock Data", result);  // "Mock Data" হওয়া উচিত
    }

    @Test
    public void testFetchDataWithRealDatabase() {
        // Real Database ইনজেক্ট করা
        Service service = injector.getInstance(Service.class);

        // ফেচড ডেটা চেক করা
        String result = service.fetchData();
        assertEquals("Real Data", result);  // "Real Data" হওয়া উচিত
    }
}

ব্যাখ্যা:

  1. Mockito Mocking: testFetchData টেস্টে, আমরা Mockito ব্যবহার করে Database ক্লাসকে মক করেছি। mockDatabase.getData() মেথডটি আমরা মক করে "Mock Data" রিটার্ন করিয়েছি।
  2. Real Dependency Injection: testFetchDataWithRealDatabase টেস্টে, আমরা Guice Injector ব্যবহার করে আসল Database ডিপেন্ডেন্সি ইনজেক্ট করেছি। এটি নিশ্চিত করে যে, Guice সঠিকভাবে ডিপেন্ডেন্সি ইনজেক্ট করছে।

Step 5: Unit Test চালানো

এখন আপনি টেস্টগুলো চালাতে পারেন এবং নিশ্চিত হতে পারেন যে আপনার Service ক্লাসের fetchData মেথড সঠিকভাবে কাজ করছে, এবং Guice সঠিকভাবে ডিপেন্ডেন্সি ইনজেক্ট করছে।


Guice এর জন্য Unit Testing এর সুবিধা

ফিচারবিবরণ
Easy Dependency InjectionGuice টেস্টের সময় সহজেই ডিপেন্ডেন্সি ইনজেক্ট করার সুযোগ দেয়।
Mocking DependenciesMockito বা অন্য মকিং ফ্রেমওয়ার্ক ব্যবহার করে ডিপেন্ডেন্সি মক করা যায়।
Loose CouplingGuice DI ব্যবহারের কারণে কোডে loose coupling থাকে, ফলে টেস্টিং সহজ হয়।
Testable CodeGuice ডিপেন্ডেন্সি ইনজেকশন ব্যবহার করে কোডের টেস্টিং সহজ এবং কার্যকর করা যায়।
Clear and Clean TestsUnit test গুলি পরিষ্কার, সরল এবং পড়তে সহজ হয়।

Guice ব্যবহার করে unit testing করা খুবই সহজ এবং কার্যকরী। Mockito বা অন্যান্য mocking টুল ব্যবহার করে আপনি Guice-এ ইনজেক্ট করা ডিপেন্ডেন্সি মক করতে পারেন, এবং Guice dependency injection ব্যবস্থার মাধ্যমে সহজে টেস্টিং করতে পারেন। এর ফলে, loose coupling, testability, এবং modular code নিশ্চিত হয়, যা আপনার অ্যাপ্লিকেশনের মান বৃদ্ধি করে এবং টেস্টিং সহজ করে তোলে।

Content added By
Promotion

Are you sure to start over?

Loading...