Mockito এবং @MockBean এর ব্যবহার

Spring DI এবং Testing - স্প্রিং ডিপেনডেন্সি ইনজেকশন (ডিআই) (Spring Dependency Injection) - Java Technologies

341

Spring Framework-এ Mockito এবং @MockBean দুটি গুরুত্বপূর্ণ টুল যা unit testing এবং integration testing এর জন্য ব্যবহৃত হয়। এগুলি Spring Beans-এর টেস্টিং-এর সময় mocking এবং dependency injection এর মাধ্যমে ডিপেনডেন্সি ম্যানেজমেন্টকে সহজ করে তোলে।


Mockito: Overview

Mockito একটি জনপ্রিয় Java mocking ফ্রেমওয়ার্ক যা unit testing-এর জন্য ব্যবহৃত হয়। এটি নির্দিষ্ট ক্লাস বা অবজেক্টের মক (mock) তৈরি করে, যাতে আসল ডিপেনডেন্সি ব্যবহার না করে, শুধুমাত্র ঐ ক্লাসের প্রয়োজনীয় আচরণ পরীক্ষা করা যায়। Mockito মক অবজেক্ট তৈরি করার জন্য অত্যন্ত সুবিধাজনক, বিশেষত যখন আপনি external dependencies বা database access-এর মতো কার্যকারিতা পরীক্ষা করতে চান না।

Mockito এর সুবিধা:

  1. Dependency Isolation: প্রকৃত ডিপেনডেন্সির পরিবর্তে মক অবজেক্ট ব্যবহার করা হয়।
  2. Behavior Verification: মক অবজেক্টের আচরণ পরীক্ষা করা যায়।
  3. State Verification: মক অবজেক্টের অবস্থাও পরীক্ষা করা যায়।

Mockito এর মাধ্যমে Spring Bean মক করা

Spring Beans-এর জন্য Mockito ব্যবহার করে মক তৈরি করা যেতে পারে। নিচের উদাহরণে Mockito দিয়ে একটি Service Layer-র মক তৈরি করা হয়েছে।

উদাহরণ: Mockito দিয়ে Service Layer মক করা

import org.junit.jupiter.api.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import static org.mockito.Mockito.*;
import static org.junit.jupiter.api.Assertions.*;

public class UserServiceTest {

    @Mock
    private UserRepository userRepository;

    @InjectMocks
    private UserService userService;

    @Test
    public void testGetUserById() {
        // Mocking the repository method
        User mockUser = new User(1, "John Doe");
        when(userRepository.findById(1)).thenReturn(Optional.of(mockUser));

        // Testing the service method
        User user = userService.getUserById(1);

        // Verifying behavior
        assertNotNull(user);
        assertEquals("John Doe", user.getName());

        // Verifying method interaction
        verify(userRepository).findById(1);
    }
}

এখানে, Mockito ব্যবহার করে UserRepository এর মক তৈরি করা হয়েছে এবং UserService-এ এই মক অবজেক্ট ইনজেক্ট করা হয়েছে। এই টেস্টে findById(1) মেথডটি মক করা হয়েছে এবং পরীক্ষিত হয়েছে।


@MockBean: Overview

@MockBean হল একটি Spring Boot টেস্ট অ্যানোটেশন যা Mockito এর মক অবজেক্ট Spring Context-এ ইনজেক্ট করতে ব্যবহৃত হয়। এটি মূলত Spring Boot Test টেস্টিং কনটেক্সটে ব্যবহৃত হয়, যেখানে আপনি Spring Beans-এর নির্দিষ্ট অংশকে মক করতে পারেন, যেমন Service, Repository ইত্যাদি, এবং Spring Context-এ ঐ মক অবজেক্টটি ইনজেক্ট করা হয়।

@MockBean সাধারণত @SpringBootTest বা @WebMvcTest টেস্ট কনফিগারেশনের সাথে ব্যবহার করা হয়।

@MockBean এর সুবিধা:

  1. Mocking in Spring Context: Spring Context-এ Bean গুলির মক অবজেক্ট ইনজেক্ট করা যায়।
  2. Dependency Injection: সহজে Bean-এর ডিপেনডেন্সি ইনজেক্ট করা যায়, যা মক বা স্টাব হিসেবে কাজ করবে।
  3. Integration Testing: পুরো Spring Context ব্যবহার করেও ইনটিগ্রেশন টেস্ট করা যায়, যেখানে মক ডিপেনডেন্সির সাথে প্রকৃত Bean-এর সহযোগিতা পরীক্ষিত হয়।

@MockBean এর মাধ্যমে Spring Bean মক করা

@MockBean ব্যবহারের মাধ্যমে আমরা Spring Beans-এর মক তৈরি করতে পারি, যাতে Spring Boot অ্যাপ্লিকেশন কনটেক্সটের মধ্যে ঐ মক Bean সঠিকভাবে কাজ করে।

উদাহরণ: @MockBean দিয়ে Spring Bean মক করা

import org.junit.jupiter.api.Test;
import org.mockito.Mock;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import static org.mockito.Mockito.*;
import static org.junit.jupiter.api.Assertions.*;

@SpringBootTest
public class UserServiceTest {

    @MockBean
    private UserRepository userRepository;

    @Autowired
    private UserService userService;

    @Test
    public void testGetUserById() {
        // Mocking the repository method
        User mockUser = new User(1, "John Doe");
        when(userRepository.findById(1)).thenReturn(Optional.of(mockUser));

        // Testing the service method
        User user = userService.getUserById(1);

        // Verifying behavior
        assertNotNull(user);
        assertEquals("John Doe", user.getName());

        // Verifying method interaction
        verify(userRepository).findById(1);
    }
}

এখানে, @MockBean ব্যবহার করে UserRepository Bean-এর মক তৈরি করা হয়েছে এবং Spring context-এ ঐ মক Bean সঠিকভাবে ইনজেক্ট করা হয়েছে। UserService-এ এই মক Bean ইনজেক্ট করা হয় এবং টেস্ট করা হয়।


@MockBean এবং Mockito এর মধ্যে পার্থক্য

  1. Mockito সাধারণভাবে মক অবজেক্ট তৈরি করার জন্য ব্যবহৃত হয় যা Spring Context-এর বাইরেও ব্যবহার করা যেতে পারে। এটি মক অবজেক্ট তৈরি করে এবং মেথড কলের জন্য আচরণ নির্ধারণ করে।
  2. @MockBean Spring Test Context-এ মক Bean ইনজেক্ট করার জন্য ব্যবহৃত হয়। এটি মূলত Spring Boot টেস্ট কনটেক্সটে ব্যবহৃত হয় এবং Spring Beans-কে মক করার জন্য সুবিধা প্রদান করে।

Conclusion

Mockito এবং @MockBean টেস্টিংয়ের জন্য অত্যন্ত গুরুত্বপূর্ণ টুল, যা Spring Beans-কে মক করতে সাহায্য করে। Mockito সাধারণভাবে unit testing এবং integration testing-এ ব্যবহৃত হয়, যেখানে আমরা বাহ্যিক ডিপেনডেন্সি বা অন্যান্য কম্পোনেন্টগুলোকে মক করে সেগুলির আচরণ পরীক্ষা করতে পারি। অন্যদিকে, @MockBean Spring Boot টেস্ট কনটেক্সটে ব্যবহৃত হয়, যা Spring Context-এ মক Bean ইনজেক্ট করে এবং Spring Beans-এর মকড ডিপেনডেন্সির সাথে টেস্টিং করতে সহায়তা করে। এ দুটি টুল আপনাকে সহজে এবং কার্যকরীভাবে Spring Bean-এর মকিং এবং টেস্টিং করার সুযোগ প্রদান করে।


Content added By
Promotion

Are you sure to start over?

Loading...