স্প্রিং বুট (Spring Boot) অ্যাপ্লিকেশন তৈরি করার পর, এটি কার্যকরভাবে পরীক্ষা করা খুবই গুরুত্বপূর্ণ। স্প্রিং বুট পরীক্ষার জন্য বেশ কিছু শক্তিশালী টুল এবং অ্যানোটেশন সরবরাহ করে, যার মধ্যে @MockBean, @Test, এবং @SpringBootTest উল্লেখযোগ্য। এই অ্যানোটেশনগুলির সাহায্যে আপনি সহজেই স্প্রিং বুট অ্যাপ্লিকেশনকে ইউনিট টেস্ট এবং ইন্টিগ্রেশন টেস্ট করতে পারেন।
এখানে, আমরা @MockBean, @Test, এবং @SpringBootTest এর ব্যবহার সম্পর্কে বিস্তারিত জানব।
১. @Test অ্যানোটেশন
@Test অ্যানোটেশনটি JUnit ফ্রেমওয়ার্কের অংশ, যা টেস্ট মেথড সনাক্ত করতে ব্যবহৃত হয়। স্প্রিং বুট টেস্ট কনফিগারেশনে JUnit 5 (Jupiter) ব্যবহার করা হয় এবং এই অ্যানোটেশনটি টেস্ট মেথডের জন্য টেস্ট কেস তৈরি করতে সাহায্য করে।
উদাহরণ:
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
public class MyServiceTest {
@Test
public void testAdd() {
MyService myService = new MyService();
int result = myService.add(2, 3);
assertEquals(5, result);
}
}
এখানে, @Test অ্যানোটেশনটি মেথডটিকে টেস্ট মেথড হিসেবে চিহ্নিত করছে এবং assertEquals() দিয়ে আমরা যাচাই করছি যে, add() মেথডের আউটপুট সঠিক কিনা।
২. @MockBean অ্যানোটেশন
@MockBean অ্যানোটেশনটি স্প্রিং বুট টেস্টে ব্যবহৃত হয়, যখন আপনি কোন নির্দিষ্ট Bean বা Service কে মক (Mock) করতে চান। এটি সাধারণত সেই সেবা বা ক্লাসের ডিপেনডেন্সি হিসাবে ব্যবহৃত হয়, যার বাস্তব কার্যকারিতা টেস্টের সময় প্রয়োজন হয় না। এর মাধ্যমে আপনি মক অবজেক্ট তৈরি করতে পারেন এবং তার আচরণ কাস্টমাইজ করতে পারেন।
উদাহরণ: @MockBean এর ব্যবহার
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
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.junit.jupiter.api.Assertions.assertEquals;
@SpringBootTest
public class MyServiceTest {
@Autowired
private MyService myService;
@MockBean
private EmployeeRepository employeeRepository;
@Test
public void testAddEmployee() {
Employee mockEmployee = new Employee(1, "John", "IT");
Mockito.when(employeeRepository.save(Mockito.any(Employee.class))).thenReturn(mockEmployee);
Employee result = myService.addEmployee(new Employee());
assertEquals("John", result.getName());
}
}
এখানে:
@MockBeanঅ্যানোটেশনটি EmployeeRepository ক্লাসের একটি মক অবজেক্ট তৈরি করেছে, যাmyServiceএর ডিপেনডেন্সি।- Mockito ব্যবহার করে, আমরা
employeeRepository.save()মেথডের আচরণ কাস্টমাইজ করেছি, যাতে এটি একটি মকEmployeeঅবজেক্ট রিটার্ন করে।
৩. @SpringBootTest অ্যানোটেশন
@SpringBootTest অ্যানোটেশনটি স্প্রিং বুট টেস্ট কনফিগারেশনের জন্য ব্যবহৃত হয়, যা অ্যাপ্লিকেশন কনটেইনার শুরু করে এবং পুরো স্প্রিং কনটেইনারের সাথে টেস্ট চালায়। এটি এক ধরণের ইন্টিগ্রেশন টেস্ট করতে ব্যবহৃত হয় যেখানে স্প্রিং কনটেইনারের সমস্ত বীন এবং ডিপেনডেন্সি লোড করা হয়। এই অ্যানোটেশনটি ব্যবহার করলে আপনি পুরো অ্যাপ্লিকেশন কনটেক্সটের সাথে টেস্ট করতে পারবেন।
উদাহরণ: @SpringBootTest এর ব্যবহার
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import static org.junit.jupiter.api.Assertions.assertNotNull;
@SpringBootTest
public class MyServiceIntegrationTest {
@Autowired
private MyService myService;
@Test
public void testServiceNotNull() {
assertNotNull(myService);
}
}
এখানে, @SpringBootTest অ্যানোটেশনটি পুরো স্প্রিং কনটেইনারকে লোড করবে এবং এর মাধ্যমে myService ডিপেনডেন্সি ইনজেক্ট করা হবে। এরপর, assertNotNull() দিয়ে যাচাই করা হবে যে, myService অবজেক্টটি ঠিকভাবে ইনজেক্ট হয়েছে কিনা।
৪. একত্রিত ব্যবহার: @Test, @MockBean, এবং @SpringBootTest
@MockBean, @Test, এবং @SpringBootTest একত্রে ব্যবহৃত হলে আপনি মক ডিপেনডেন্সি দিয়ে পুরো স্প্রিং কনটেইনারের সাথে ইউনিট টেস্ট এবং ইন্টিগ্রেশন টেস্ট করতে পারবেন।
উদাহরণ: একত্রিত ব্যবহার
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
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.junit.jupiter.api.Assertions.assertEquals;
@SpringBootTest
public class MyServiceTest {
@Autowired
private MyService myService;
@MockBean
private EmployeeRepository employeeRepository;
@Test
public void testAddEmployee() {
Employee mockEmployee = new Employee(1, "John", "IT");
Mockito.when(employeeRepository.save(Mockito.any(Employee.class))).thenReturn(mockEmployee);
Employee result = myService.addEmployee(new Employee());
assertEquals("John", result.getName());
}
}
এখানে:
@SpringBootTestঅ্যাপ্লিকেশন কনটেইনার লোড করে এবংmyServiceএবং অন্যান্য প্রয়োজনীয় বীনগুলির সাথে টেস্ট চালায়।@MockBeanব্যবহার করেemployeeRepositoryএর একটি মক অবজেক্ট তৈরি করা হয়েছে, যাতে Service টেস্ট করার সময় শুধুমাত্র ঐ মক অবজেক্টটি ব্যবহার হয়।@Testঅ্যানোটেশনটি টেস্ট মেথড চিহ্নিত করে এবং আমরা Mockito এর মাধ্যমে মক অবজেক্টের আচরণ কাস্টমাইজ করি।
সারাংশ
স্প্রিং বুট টেস্টিংয়ের জন্য @MockBean, @Test, এবং @SpringBootTest অ্যানোটেশনগুলো গুরুত্বপূর্ণ ভূমিকা পালন করে:
@Test: টেস্ট মেথড চিহ্নিত করে, যা JUnit এর একটি অংশ।@MockBean: স্প্রিং কনটেইনারের মধ্যে একটি মক অবজেক্ট তৈরি করে, যাতে আপনি ডিপেনডেন্সির আচরণ কাস্টমাইজ করতে পারেন।@SpringBootTest: স্প্রিং কনটেইনারকে লোড করে এবং পুরো অ্যাপ্লিকেশন কনটেক্সটে টেস্ট করার সুযোগ দেয়।
এই অ্যানোটেশনগুলো ব্যবহার করে আপনি ইউনিট টেস্ট, ইনটিগ্রেশন টেস্ট এবং মকিং কৌশলগুলির মাধ্যমে স্প্রিং বুট অ্যাপ্লিকেশন সঠিকভাবে পরীক্ষা করতে পারবেন।
Read more