Java Technologies JUnit এবং Mockito দিয়ে Testing করা গাইড ও নোট

286

স্প্রিং বুট অ্যাপ্লিকেশনগুলির জন্য সঠিক টেস্টিং গুরুত্বপূর্ণ, কারণ এটি অ্যাপ্লিকেশনের কার্যকারিতা নিশ্চিত করতে সহায়তা করে। JUnit এবং Mockito দুটি জনপ্রিয় টুল যা স্প্রিং বুট অ্যাপ্লিকেশন টেস্টিংয়ের জন্য ব্যবহৃত হয়। JUnit টেস্ট ফ্রেমওয়ার্ক হিসেবে ব্যবহৃত হয়, যেখানে Mockito একটি মকিং ফ্রেমওয়ার্ক হিসেবে কাজ করে। এই দুটি টুলের মাধ্যমে আপনি স্প্রিং বুট অ্যাপ্লিকেশনগুলির বিভিন্ন অংশ যেমন সার্ভিস, রেপোজিটরি, কন্ট্রোলার ইত্যাদির টেস্টিং করতে পারেন।

JUnit

JUnit একটি ওপেন সোর্স টেস্টিং ফ্রেমওয়ার্ক যা Java প্রোগ্রামিং ভাষায় লেখা টেস্ট কেসগুলো রান করতে ব্যবহৃত হয়। স্প্রিং বুট অ্যাপ্লিকেশন টেস্ট করতে JUnit-এর বিভিন্ন ভার্সন ব্যবহার করা যায়, তবে বর্তমানে JUnit 5 ব্যবহৃত হয় যা আরও উন্নত এবং আধুনিক।

Mockito

Mockito একটি মকিং ফ্রেমওয়ার্ক যা টেস্ট কেসগুলিতে নির্ভরশীল (dependency) অবজেক্টগুলিকে মক (mock) করার জন্য ব্যবহৃত হয়। এটি বিশেষত ইউনি টেস্টিংয়ের জন্য কার্যকরী, কারণ আপনি একটি মক অবজেক্ট তৈরি করতে পারেন এবং টেস্টের সময় সেই মক অবজেক্টের কার্যকারিতা নির্ধারণ করতে পারেন।

স্প্রিং বুট টেস্টিংয়ের জন্য প্রয়োজনীয় ডিপেনডেন্সি

স্প্রিং বুট অ্যাপ্লিকেশন টেস্টিংয়ের জন্য প্রথমে আপনাকে কিছু ডিপেনডেন্সি আপনার pom.xml ফাইলে যোগ করতে হবে।

Maven ডিপেনডেন্সি

<dependencies>
    <!-- Spring Boot Test Dependency -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>

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

এই ডিপেনডেন্সির মাধ্যমে আপনি @SpringBootTest, @MockBean, @RunWith, এবং Mockito ব্যবহার করতে পারবেন।

JUnit এবং Mockito দিয়ে টেস্টিংয়ের উদাহরণ

ধরা যাক, আমাদের একটি EmployeeService ক্লাস রয়েছে, যেটি EmployeeRepository থেকে ডেটা নিয়ে কাজ করে। আমরা EmployeeService ক্লাসটিকে টেস্ট করার জন্য Mockito ব্যবহার করে EmployeeRepository কে মক করব।

১. EmployeeService ক্লাস

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class EmployeeService {

    @Autowired
    private EmployeeRepository employeeRepository;

    public List<Employee> getAllEmployees() {
        return employeeRepository.findAll();
    }

    public Employee getEmployeeById(Long id) {
        return employeeRepository.findById(id).orElse(null);
    }
}

২. EmployeeRepository (ইন্টারফেস)

import org.springframework.data.jpa.repository.JpaRepository;

public interface EmployeeRepository extends JpaRepository<Employee, Long> {
}

৩. EmployeeController (কন্ট্রোলার)

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class EmployeeController {

    @Autowired
    private EmployeeService employeeService;

    @GetMapping("/employees/{id}")
    public Employee getEmployeeById(@PathVariable Long id) {
        return employeeService.getEmployeeById(id);
    }
}

৪. টেস্ট ক্লাস তৈরি করা

এখন আমরা EmployeeService ক্লাসটির জন্য টেস্ট ক্লাস তৈরি করব। এখানে আমরা @MockBean এবং @SpringBootTest ব্যবহার করব। @MockBean ব্যবহার করে আমরা EmployeeRepository কে মক করব যাতে ডেটাবেসের প্রয়োজন না হয়।

টেস্ট ক্লাস উদাহরণ

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

import org.junit.jupiter.api.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.mock.mockito.MockBean;

import java.util.Arrays;
import java.util.List;

@SpringBootTest
public class EmployeeServiceTest {

    @MockBean
    private EmployeeRepository employeeRepository;

    @InjectMocks
    private EmployeeService employeeService;

    @Test
    public void testGetAllEmployees() {
        // Mocking the repository method
        Employee employee1 = new Employee(1L, "John", "Doe");
        Employee employee2 = new Employee(2L, "Jane", "Doe");

        when(employeeRepository.findAll()).thenReturn(Arrays.asList(employee1, employee2));

        // Calling the service method
        List<Employee> employees = employeeService.getAllEmployees();

        // Verifying the result
        assertNotNull(employees);
        assertEquals(2, employees.size());
        assertEquals("John", employees.get(0).getFirstName());
    }

    @Test
    public void testGetEmployeeById() {
        // Mocking the repository method
        Employee employee = new Employee(1L, "John", "Doe");

        when(employeeRepository.findById(1L)).thenReturn(java.util.Optional.of(employee));

        // Calling the service method
        Employee foundEmployee = employeeService.getEmployeeById(1L);

        // Verifying the result
        assertNotNull(foundEmployee);
        assertEquals("John", foundEmployee.getFirstName());
    }
}

ব্যাখ্যা:

  1. @MockBean: EmployeeRepository কে মক করা হচ্ছে, যাতে ডেটাবেস কনফিগারেশন ছাড়াই টেস্ট করা যায়।
  2. @InjectMocks: স্প্রিং বুট স্বয়ংক্রিয়ভাবে EmployeeService ক্লাসে মক করা EmployeeRepository ইনজেক্ট করে।
  3. when() and thenReturn(): Mockito এর মাধ্যমে আমরা EmployeeRepository এর মেথড findAll() এবং findById() এর জন্য মক ভ্যালু রিটার্ন করিয়েছি।
  4. assertNotNull() and assertEquals(): JUnit এর assert মেথড দিয়ে আমরা টেস্টের রেজাল্ট যাচাই করেছি।

স্প্রিং বুট টেস্টিং-এর সুবিধা

  • ইনটিগ্রেশন টেস্টিং: স্প্রিং বুট টেস্টিং অ্যাপ্লিকেশন কনটেক্সট লোড করে, ফলে এটি ডেটাবেস, সার্ভিস, কন্ট্রোলারসহ অন্যান্য সমস্ত অংশের ইন্টিগ্রেশন টেস্টিং সহজ করে তোলে।
  • Mockito মকিং: Mockito ব্যবহার করে নির্ভরশীল অবজেক্ট (যেমন রেপোজিটরি) মক করা যায়, ফলে আপনি শুধুমাত্র সার্ভিস বা কন্ট্রোলারের লজিক টেস্ট করতে পারেন।
  • JUnit: JUnit এর মাধ্যমে আপনি আপনার টেস্ট কেস গুলি চালাতে পারেন এবং অ্যাপ্লিকেশনের পারফরম্যান্স ও কার্যকারিতা যাচাই করতে পারেন।

JUnit এবং Mockito এর মাধ্যমে স্প্রিং বুট অ্যাপ্লিকেশন টেস্টিং করার মাধ্যমে আপনি দ্রুত এবং সহজভাবে আপনার কোডের কার্যকারিতা যাচাই করতে পারেন। এটি আপনার অ্যাপ্লিকেশনকে আরো নির্ভরযোগ্য এবং রিয়েল-টাইম অ্যাপ্লিকেশনের জন্য প্রস্তুত করে তোলে।

Content added By
Promotion

Are you sure to start over?

Loading...