উদাহরণ সহ Spring MVC Testing

Testing Spring MVC Applications - স্প্রিং এমভিসি (Spring MVC) - Java Technologies

312

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): এই কলটি /home URL থেকে রেসপন্স ফেরত আনবে এবং তার কন্টেন্ট চেক করবে।

ধাপ 2: Run the Integration Test

এখন আপনি ইন্টিগ্রেশন টেস্ট চালিয়ে দেখতে পারেন যে, আপনার Spring MVC অ্যাপ্লিকেশন কিভাবে কাজ করছে। এই ধরনের টেস্টিং ফিচারটি ইউজার ইন্টারফেস এবং রিয়েল সার্ভার ইন্টারঅ্যাকশন নিশ্চিত করার জন্য গুরুত্বপূর্ণ।


3. MockMvc এবং @WebMvcTest এর সুবিধা

  • উত্তরদায়ী এবং দ্রুত: MockMvc ব্যবহার করে শুধুমাত্র কন্ট্রোলার এবং রিকোয়েস্ট-রেসপন্স প্রক্রিয়া টেস্ট করা হয়, ফলে দ্রুত টেস্ট রান করা যায়।
  • ইউনিট টেস্ট: কন্ট্রোলারের লজিক নির্দিষ্ট করে পরীক্ষা করা যায়, যা ইউনিট টেস্ট হিসেবে ব্যবহৃত হয়।
  • ইন্টিগ্রেশন টেস্ট: @SpringBootTest ব্যবহারে পুরো Spring Boot অ্যাপ্লিকেশন টেস্ট করা যায়।

উপসংহার

Spring MVC অ্যাপ্লিকেশন টেস্টিং গুরুত্বপূর্ণ অংশ এবং MockMvc, @WebMvcTest, এবং @SpringBootTest ব্যবহার করে আপনি সহজে কন্ট্রোলার এবং সম্পূর্ণ অ্যাপ্লিকেশন টেস্ট করতে পারেন। এই টেস্টিং প্রযুক্তিগুলি আপনাকে দ্রুত, নির্ভুল এবং কার্যকর টেস্টিং করার সুযোগ দেয়, যা আপনাকে নিরাপদ ও স্থিতিশীল কোড প্রদান করতে সহায়ক।

Content added By
Promotion

Are you sure to start over?

Loading...