Spring MVC অ্যাপ্লিকেশন পরীক্ষা করার জন্য Spring Test ফ্রেমওয়ার্কে কয়েকটি শক্তিশালী টুল এবং কৌশল রয়েছে। Spring MVC টেস্টিং মূলত @WebMvcTest, MockMvc, এবং @SpringBootTest ব্যবহার করে করা হয়। এই টেস্টিং টুলগুলির মাধ্যমে আপনি কন্ট্রোলার, রিকোয়েস্ট, রেসপন্স এবং অন্যান্য গুরুত্বপূর্ণ ফিচারগুলো সহজেই পরীক্ষা করতে পারেন।
এখানে, আমরা দেখবো কিভাবে Spring MVC অ্যাপ্লিকেশনে টেস্টিং করা যায়, বিশেষত কন্ট্রোলার টেস্ট করার জন্য।
1. MockMvc টেস্টিং
MockMvc Spring Test ফ্রেমওয়ার্কের একটি কমপ্যাক্ট টুল যা HTTP রিকোয়েস্ট এবং রেসপন্স প্রক্রিয়া পরীক্ষা করার জন্য ব্যবহৃত হয়। এটি অ্যাপ্লিকেশন কনটেক্সটে রিকোয়েস্ট পাঠানোর জন্য ব্যবহার করা হয়, কিন্তু ফ্যাক্টরী এবং সার্ভার রান করতে হয় না।
ধাপ 1: Dependency যোগ করা (Maven)
Spring MVC টেস্টিং এর জন্য আপনাকে spring-test এবং spring-boot-starter-test ডিপেন্ডেন্সি প্যাকেজ ইনস্টল করতে হবে।
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
ধাপ 2: Controller টেস্ট করা
ধরা যাক, আমাদের একটি HomeController রয়েছে যেটি /home URL তে রিকোয়েস্ট হ্যান্ডল করে।
@Controller
public class HomeController {
@GetMapping("/home")
public String home(Model model) {
model.addAttribute("message", "Welcome to Spring MVC Testing!");
return "home";
}
}
এখন, আমরা এই কন্ট্রোলারের টেস্ট করব।
ধাপ 3: MockMvc টেস্ট কনফিগারেশন
Spring Test এর MockMvc ক্লাস ব্যবহার করে কন্ট্রোলার টেস্ট করা যাবে। নিচে একটি টেস্টের উদাহরণ দেওয়া হলো:
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
@WebMvcTest(HomeController.class)
public class HomeControllerTest {
@Autowired
private MockMvc mockMvc;
@Test
public void testHome() throws Exception {
mockMvc.perform(MockMvcRequestBuilders.get("/home"))
.andExpect(MockMvcResultMatchers.status().isOk()) // Check if status is 200 OK
.andExpect(MockMvcResultMatchers.view().name("home")) // Check if view is 'home'
.andExpect(MockMvcResultMatchers.model().attribute("message", "Welcome to Spring MVC Testing!")); // Check model attribute
}
}
এখানে:
@WebMvcTest(HomeController.class): শুধুমাত্রHomeControllerকন্ট্রোলার টেস্ট করার জন্য এই অ্যানোটেশন ব্যবহার করা হয়েছে।MockMvcRequestBuilders.get("/home"): HTTP GET রিকোয়েস্ট তৈরি করা হচ্ছে।andExpect(MockMvcResultMatchers.status().isOk()): স্ট্যাটাস কোড 200 (OK) যাচাই করা হচ্ছে।andExpect(MockMvcResultMatchers.view().name("home")): রেসপন্স ভিউ চেক করা হচ্ছে (এখানে"home"ভিউ আশা করা হচ্ছে)।andExpect(MockMvcResultMatchers.model().attribute("message", "Welcome to Spring MVC Testing!")): মডেল অ্যাট্রিবিউট চেক করা হচ্ছে।
ধাপ 4: Run the Test
এখন আপনি @Test টেস্ট রান করলে HomeController এর /home URL এ রিকোয়েস্ট পাঠিয়ে সঠিক রেসপন্স এবং মডেল যাচাই করতে পারবেন।
2. Integration Testing with @SpringBootTest
যদি আপনি পুরো Spring Boot অ্যাপ্লিকেশনটি টেস্ট করতে চান, তবে @SpringBootTest ব্যবহার করতে পারেন। এটি সম্পূর্ণ অ্যাপ্লিকেশন কনটেক্সট লোড করে এবং রিয়েল HTTP রিকোয়েস্ট পাঠানোর মাধ্যমে টেস্ট করে।
ধাপ 1: Integration Test Example
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.web.client.TestRestTemplate;
import org.springframework.http.ResponseEntity;
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class HomeControllerIntegrationTest {
@Autowired
private TestRestTemplate restTemplate;
@Test
public void testHomeIntegration() {
ResponseEntity<String> response = restTemplate.getForEntity("/home", String.class);
// Assert the response status and content
assert(response.getStatusCodeValue() == 200);
assert(response.getBody().contains("Welcome to Spring MVC Testing!"));
}
}
এখানে:
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT): এটি Spring Boot অ্যাপ্লিকেশনকে ইন্টিগ্রেশন টেস্টের জন্য চালু করে এবংRANDOM_PORTব্যবহার করে টেস্ট সার্ভার চালু করে।TestRestTemplate: এটি Spring Boot অ্যাপ্লিকেশনের সাথে HTTP রিকোয়েস্ট পাঠানোর জন্য ব্যবহৃত হয়।getForEntity("/home", String.class): এই কলটি/homeURL থেকে রেসপন্স ফেরত আনবে এবং তার কন্টেন্ট চেক করবে।
ধাপ 2: Run the Integration Test
এখন আপনি ইন্টিগ্রেশন টেস্ট চালিয়ে দেখতে পারেন যে, আপনার Spring MVC অ্যাপ্লিকেশন কিভাবে কাজ করছে। এই ধরনের টেস্টিং ফিচারটি ইউজার ইন্টারফেস এবং রিয়েল সার্ভার ইন্টারঅ্যাকশন নিশ্চিত করার জন্য গুরুত্বপূর্ণ।
3. MockMvc এবং @WebMvcTest এর সুবিধা
- উত্তরদায়ী এবং দ্রুত:
MockMvcব্যবহার করে শুধুমাত্র কন্ট্রোলার এবং রিকোয়েস্ট-রেসপন্স প্রক্রিয়া টেস্ট করা হয়, ফলে দ্রুত টেস্ট রান করা যায়। - ইউনিট টেস্ট: কন্ট্রোলারের লজিক নির্দিষ্ট করে পরীক্ষা করা যায়, যা ইউনিট টেস্ট হিসেবে ব্যবহৃত হয়।
- ইন্টিগ্রেশন টেস্ট:
@SpringBootTestব্যবহারে পুরো Spring Boot অ্যাপ্লিকেশন টেস্ট করা যায়।
উপসংহার
Spring MVC অ্যাপ্লিকেশন টেস্টিং গুরুত্বপূর্ণ অংশ এবং MockMvc, @WebMvcTest, এবং @SpringBootTest ব্যবহার করে আপনি সহজে কন্ট্রোলার এবং সম্পূর্ণ অ্যাপ্লিকেশন টেস্ট করতে পারেন। এই টেস্টিং প্রযুক্তিগুলি আপনাকে দ্রুত, নির্ভুল এবং কার্যকর টেস্টিং করার সুযোগ দেয়, যা আপনাকে নিরাপদ ও স্থিতিশীল কোড প্রদান করতে সহায়ক।
Read more