উদাহরণ সহ Spring Boot JPA Testing

Java Technologies - স্প্রিং বুট জেপিএ (Spring Boot JPA) - Testing Spring Boot JPA Applications
258

Spring Boot JPA Testing হল Spring Boot অ্যাপ্লিকেশনে JPA (Java Persistence API) ভিত্তিক ডেটাবেস অপারেশন পরীক্ষা করার প্রক্রিয়া। Spring Boot JPA Testing সাধারণত JUnit এবং Mockito এর মাধ্যমে করা হয়, যেখানে @DataJpaTest অ্যানোটেশন ব্যবহার করে JPA সম্পর্কিত টেস্ট কেস লেখা হয়। এই টেস্ট কেসগুলিতে ডেটাবেসে ইনসার্ট, আপডেট, ডিলিট, এবং রিড অপারেশন পরীক্ষা করা হয়।

Spring Boot JPA Testing এর মূল বিষয়

  1. @DataJpaTest: এই অ্যানোটেশনটি Spring Data JPA-র টেস্টিংয়ের জন্য ব্যবহৃত হয়। এটি শুধুমাত্র JPA রিলেটেড টেস্টিং কার্যক্রমকে সক্রিয় করে, যেমন রেপোজিটরি এবং ডেটাবেস সংক্রান্ত টেস্টিং। এই অ্যানোটেশনটি Spring Boot Test এর একটি অংশ এবং JUnit এর সাথে কাজ করে।
  2. In-Memory Database: টেস্টিংয়ের জন্য সাধারণত ইন-মেমরি ডেটাবেস (যেমন H2, HSQL) ব্যবহার করা হয় যাতে ডেটাবেসের অবস্থা প্রকৃত ডেটাবেসের সাথে মিল না করে এবং টেস্ট শেষে ডেটাবেস ক্লিন করা যায়।
  3. Repository Testing: Spring Data JPA রেপোজিটরি এবং কুয়েরি মেথডগুলির কার্যকারিতা যাচাই করার জন্য repository layer টেস্ট করা হয়।
  4. Mocking: Mockito ব্যবহার করে নির্দিষ্ট ডিপেনডেন্সি মক করা যেতে পারে। তবে, JPA-র ক্ষেত্রে @MockBean বা @Autowired দিয়ে সরাসরি রেপোজিটরি ইনজেক্ট করা হয়।

Spring Boot JPA Testing: উদাহরণ

ধরা যাক, আপনার একটি Employee Entity রয়েছে এবং আপনি এটি দিয়ে কিছু ডেটাবেস অপারেশন পরীক্ষা করবেন।

১. Entity Class: Employee

@Entity
public class Employee {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    
    private String name;
    private String position;

    // Getters এবং Setters
}

২. Repository Interface: EmployeeRepository

Spring Data JPA-র মাধ্যমে EmployeeRepository ইন্টারফেস তৈরি করা হবে, যেখানে কিছু সাধারণ ডেটাবেস অপারেশন থাকবে:

public interface EmployeeRepository extends JpaRepository<Employee, Long> {
    List<Employee> findByPosition(String position);
}

৩. Service Layer: EmployeeService

EmployeeService ক্লাসে রেপোজিটরি ব্যবহার করে কিছু সার্ভিস ফাংশন তৈরি করা হবে:

@Service
public class EmployeeService {

    @Autowired
    private EmployeeRepository employeeRepository;

    public Employee saveEmployee(Employee employee) {
        return employeeRepository.save(employee);
    }

    public List<Employee> getEmployeesByPosition(String position) {
        return employeeRepository.findByPosition(position);
    }

    public void deleteEmployee(Long id) {
        employeeRepository.deleteById(id);
    }
}

Spring Boot JPA Testing - Test Class

Spring Boot JPA Testing করতে @DataJpaTest অ্যানোটেশন ব্যবহার করা হবে। আমরা রেপোজিটরি এবং সার্ভিস স্তরের কার্যকারিতা যাচাই করার জন্য টেস্ট কেস তৈরি করব।

১. Repository Testing:

@DataJpaTest
public class EmployeeRepositoryTest {

    @Autowired
    private EmployeeRepository employeeRepository;

    @Test
    public void testSaveEmployee() {
        Employee employee = new Employee();
        employee.setName("John Doe");
        employee.setPosition("Developer");

        Employee savedEmployee = employeeRepository.save(employee);

        assertNotNull(savedEmployee);
        assertEquals("John Doe", savedEmployee.getName());
    }

    @Test
    public void testFindByPosition() {
        Employee employee1 = new Employee();
        employee1.setName("John Doe");
        employee1.setPosition("Developer");
        employeeRepository.save(employee1);

        Employee employee2 = new Employee();
        employee2.setName("Jane Doe");
        employee2.setPosition("Manager");
        employeeRepository.save(employee2);

        List<Employee> developers = employeeRepository.findByPosition("Developer");

        assertEquals(1, developers.size());
        assertEquals("John Doe", developers.get(0).getName());
    }

    @Test
    public void testDeleteEmployee() {
        Employee employee = new Employee();
        employee.setName("John Doe");
        employee.setPosition("Developer");
        Employee savedEmployee = employeeRepository.save(employee);

        employeeRepository.delete(savedEmployee);

        Optional<Employee> deletedEmployee = employeeRepository.findById(savedEmployee.getId());
        assertFalse(deletedEmployee.isPresent());
    }
}

ব্যাখ্যা:

  1. testSaveEmployee: Employee অবজেক্টটি save() মেথড ব্যবহার করে ডেটাবেসে সেভ করা হচ্ছে। টেস্টটি যাচাই করে যে সেভ হওয়া অবজেক্টের name সঠিকভাবে সেট হয়েছে।
  2. testFindByPosition: findByPosition মেথডের মাধ্যমে ডেটাবেসে position অনুসারে Employee খুঁজে বের করা হচ্ছে। এটি যাচাই করে যে position এর মানের সাথে মেলে এমন ডেটা পাওয়া গেছে কিনা।
  3. testDeleteEmployee: deleteById মেথড ব্যবহার করে Employee মুছে ফেলা হচ্ছে এবং পরে যাচাই করা হচ্ছে যে ডেটাবেসে ঐ Employee অবজেক্টটি আর নেই।

২. Service Layer Testing:

@SpringBootTest
public class EmployeeServiceTest {

    @Autowired
    private EmployeeService employeeService;

    @Autowired
    private EmployeeRepository employeeRepository;

    @Test
    public void testSaveEmployee() {
        Employee employee = new Employee();
        employee.setName("John Doe");
        employee.setPosition("Developer");

        Employee savedEmployee = employeeService.saveEmployee(employee);

        assertNotNull(savedEmployee);
        assertEquals("John Doe", savedEmployee.getName());
    }

    @Test
    public void testGetEmployeesByPosition() {
        Employee employee = new Employee();
        employee.setName("John Doe");
        employee.setPosition("Developer");
        employeeRepository.save(employee);

        List<Employee> developers = employeeService.getEmployeesByPosition("Developer");

        assertEquals(1, developers.size());
        assertEquals("John Doe", developers.get(0).getName());
    }

    @Test
    public void testDeleteEmployee() {
        Employee employee = new Employee();
        employee.setName("John Doe");
        employee.setPosition("Developer");
        Employee savedEmployee = employeeRepository.save(employee);

        employeeService.deleteEmployee(savedEmployee.getId());

        Optional<Employee> deletedEmployee = employeeRepository.findById(savedEmployee.getId());
        assertFalse(deletedEmployee.isPresent());
    }
}

ব্যাখ্যা:

  1. testSaveEmployee: EmployeeService এর saveEmployee মেথডে Employee অবজেক্ট সেভ করা হচ্ছে এবং টেস্টটি যাচাই করছে সেভ করা অবজেক্টের name সঠিকভাবে ইনজেক্ট হয়েছে কিনা।
  2. testGetEmployeesByPosition: EmployeeService এর getEmployeesByPosition মেথডে position অনুসারে ডেটা খুঁজে বের করা হচ্ছে এবং টেস্টটি যাচাই করছে যে সঠিক Employee পাওয়া গেছে।
  3. testDeleteEmployee: EmployeeService এর deleteEmployee মেথডে Employee মুছে ফেলা হচ্ছে এবং পরে যাচাই করা হচ্ছে যে সেই Employee আর ডেটাবেসে নেই।

Spring Boot JPA Testing-এ Best Practices

  1. @DataJpaTest: শুধুমাত্র JPA সম্পর্কিত টেস্টিং করতে এই অ্যানোটেশন ব্যবহার করুন। এটি টেস্ট কনটেক্সটকে দ্রুত তৈরি করতে সাহায্য করে এবং ইন-মেমরি ডেটাবেস ব্যবহার করে টেস্টিং করে।
  2. Transactional Tests: টেস্টের শেষে ডেটাবেসের অবস্থা সাফ রাখতে @Transactional ব্যবহার করুন, যা টেস্ট শেষে সব পরিবর্তন রোলব্যাক করে।
  3. In-Memory Databases: টেস্টিংয়ের জন্য H2 বা HSQL এর মতো ইন-মেমরি ডেটাবেস ব্যবহার করুন, যাতে টেস্টের পরে ডেটাবেস পরিষ্কার থাকে।
  4. Mocking: যখন সার্ভিস স্তরের টেস্ট করছেন, তখন Mockito ব্যবহার করে ডিপেনডেন্সিগুলো মক করতে পারেন।

সারাংশ

Spring Boot JPA Testing হল Spring Boot অ্যাপ্লিকেশনগুলিতে JPA সম্পর্কিত ডেটাবেস অপারেশনগুলির সঠিক কার্যকারিতা যাচাই করার প্রক্রিয়া। @DataJpaTest এবং @SpringBootTest অ্যানোটেশন ব্যবহার করে আমরা রেপোজিটরি এবং সার্ভিস স্তরের টেস্টিং করতে পারি। Spring Boot JPA Testing ডেটাবেসের CRUD অপারেশন, কাস্টম কুয়েরি এবং বিভিন্ন এক্সসেপশন হ্যান্ডলিং পরীক্ষা করতে সহায়তা করে।


Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...