স্প্রিং বুট অ্যাপ্লিকেশনগুলির জন্য সঠিক টেস্টিং গুরুত্বপূর্ণ, কারণ এটি অ্যাপ্লিকেশনের কার্যকারিতা নিশ্চিত করতে সহায়তা করে। 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());
}
}
ব্যাখ্যা:
- @MockBean:
EmployeeRepositoryকে মক করা হচ্ছে, যাতে ডেটাবেস কনফিগারেশন ছাড়াই টেস্ট করা যায়। - @InjectMocks: স্প্রিং বুট স্বয়ংক্রিয়ভাবে
EmployeeServiceক্লাসে মক করাEmployeeRepositoryইনজেক্ট করে। - when() and thenReturn():
Mockitoএর মাধ্যমে আমরাEmployeeRepositoryএর মেথডfindAll()এবংfindById()এর জন্য মক ভ্যালু রিটার্ন করিয়েছি। - assertNotNull() and assertEquals():
JUnitএর assert মেথড দিয়ে আমরা টেস্টের রেজাল্ট যাচাই করেছি।
স্প্রিং বুট টেস্টিং-এর সুবিধা
- ইনটিগ্রেশন টেস্টিং: স্প্রিং বুট টেস্টিং অ্যাপ্লিকেশন কনটেক্সট লোড করে, ফলে এটি ডেটাবেস, সার্ভিস, কন্ট্রোলারসহ অন্যান্য সমস্ত অংশের ইন্টিগ্রেশন টেস্টিং সহজ করে তোলে।
- Mockito মকিং: Mockito ব্যবহার করে নির্ভরশীল অবজেক্ট (যেমন রেপোজিটরি) মক করা যায়, ফলে আপনি শুধুমাত্র সার্ভিস বা কন্ট্রোলারের লজিক টেস্ট করতে পারেন।
- JUnit: JUnit এর মাধ্যমে আপনি আপনার টেস্ট কেস গুলি চালাতে পারেন এবং অ্যাপ্লিকেশনের পারফরম্যান্স ও কার্যকারিতা যাচাই করতে পারেন।
JUnit এবং Mockito এর মাধ্যমে স্প্রিং বুট অ্যাপ্লিকেশন টেস্টিং করার মাধ্যমে আপনি দ্রুত এবং সহজভাবে আপনার কোডের কার্যকারিতা যাচাই করতে পারেন। এটি আপনার অ্যাপ্লিকেশনকে আরো নির্ভরযোগ্য এবং রিয়েল-টাইম অ্যাপ্লিকেশনের জন্য প্রস্তুত করে তোলে।
Read more