Practical উদাহরণ: Spring Boot Application এর জন্য JUnit Test তৈরি

JUnit এবং Spring Framework Integration - জেইউনিট (JUnit) - Java Technologies

267

JUnit হল একটি জনপ্রিয় Java টেস্টিং ফ্রেমওয়ার্ক যা আপনাকে ইউনিট টেস্ট তৈরি করতে সাহায্য করে। যখন আপনি Spring Boot অ্যাপ্লিকেশন তৈরি করেন, তখন MockMvc একটি কার্যকরী টুল, যা আপনার ওয়েব লেয়ারের টেস্টিং করতে সহায়তা করে। এটি Spring MVC কন্ট্রোলারগুলি পরীক্ষা করতে ব্যবহৃত হয়, এবং ডেটাবেসের সাথে সরাসরি ইন্টারঅ্যাক্ট না করেই HTTP রিকোয়েস্ট এবং রেসপন্স টেস্ট করতে সক্ষম।

এই টিউটোরিয়ালে, আমরা JUnit এবং MockMvc ব্যবহার করে কিভাবে ওয়েব লেয়ারের টেস্টিং করা যায় তা দেখব।


১. MockMvc এর ধারণা

MockMvc হল Spring MVC টেস্টিংয়ের জন্য একটি ক্লাস, যা HTTP রিকোয়েস্ট পাঠাতে এবং কন্ট্রোলার মেথডগুলির রেসপন্স যাচাই করতে সহায়তা করে। এটি সার্ভার স্টার্ট না করেও ওয়েব লেয়ারের টেস্টিং করতে পারে, কারণ এটি পুরো অ্যাপ্লিকেশন কনটেক্সট বা ওয়েব কন্ট্রোলার মডিউলের ওপর কাজ করে।


২. MockMvc সেটআপ

Maven Dependency

প্রথমে, আপনাকে Maven প্রোজেক্টে Spring Boot Starter Test ডিপেনডেন্সি যুক্ত করতে হবে। নিচে একটি উদাহরণ দেয়া হলো:

<dependencies>
    <!-- Spring Boot Starter Test Dependency -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

এখানে, spring-boot-starter-test ডিপেনডেন্সি ব্যবহৃত হয়েছে, যা JUnit, MockMvc, Mockito, এবং অন্যান্য টেস্টিং টুলস অন্তর্ভুক্ত করে।

Gradle Dependency

যদি আপনি Gradle ব্যবহার করেন, তবে এটি আপনার build.gradle ফাইলে যুক্ত করুন:

dependencies {
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

৩. MockMvc টেস্টিং ক্লাস তৈরি করা

MockMvc ব্যবহার করতে হলে, আপনাকে প্রথমে একটি টেস্ট ক্লাস তৈরি করতে হবে এবং সেখান থেকে টেস্ট কেসগুলি রচনা করতে হবে। সাধারণত, টেস্ট ক্লাসে @WebMvcTest অ্যানোটেশন ব্যবহার করা হয়, যা Spring MVC কন্ট্রোলার টেস্ট করার জন্য উপযুক্ত।

উদাহরণ: MockMvc Test Class

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.result.MockMvcResultMatchers;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

@WebMvcTest
public class UserControllerTest {

    @Autowired
    private MockMvc mockMvc;

    @Test
    public void testGetUser() throws Exception {
        // Perform GET request and check status and response content
        mockMvc.perform(MockMvcRequestBuilders.get("/users/1"))
                .andExpect(status().isOk()) // Assert that the response status is 200 OK
                .andExpect(MockMvcResultMatchers.jsonPath("$.name").value("John Doe")); // Assert response body content
    }
}

এখানে:

  • @WebMvcTest অ্যানোটেশনটি শুধুমাত্র ওয়েব লেয়ারের টেস্টিংয়ের জন্য কনফিগার করা হয়। এটি Spring MVC কন্ট্রোলারকে পরীক্ষার জন্য Spring context কে লোড করবে।
  • MockMvcRequestBuilders.get("/users/1") এর মাধ্যমে GET রিকোয়েস্ট পাঠানো হয়েছে।
  • MockMvcResultMatchers.status().isOk() চেক করে যে রেসপন্সের স্ট্যাটাস কোড 200 OK কিনা।
  • jsonPath("$.name").value("John Doe") এর মাধ্যমে রেসপন্স বডির কিছু কনটেন্ট চেক করা হয়েছে।

৪. MockMvc এ POST রিকোয়েস্ট টেস্ট করা

POST রিকোয়েস্ট টেস্ট করা কিভাবে কাজ করে, তা দেখার জন্য একটি উদাহরণ:

@Test
public void testCreateUser() throws Exception {
    // Create a new User object and convert it to JSON
    String userJson = "{\"name\":\"Jane Doe\",\"email\":\"jane.doe@example.com\"}";

    mockMvc.perform(MockMvcRequestBuilders.post("/users")
                .contentType("application/json")
                .content(userJson)) // Send POST request with user data
                .andExpect(status().isCreated()) // Assert that the response status is 201 Created
                .andExpect(MockMvcResultMatchers.jsonPath("$.name").value("Jane Doe")); // Assert response body content
}

এখানে:

  • MockMvcRequestBuilders.post("/users") এর মাধ্যমে POST রিকোয়েস্ট পাঠানো হয়েছে।
  • contentType("application/json") এবং content(userJson) ব্যবহার করে JSON ডেটা পাঠানো হয়েছে।
  • status().isCreated() চেক করে যে রেসপন্সের স্ট্যাটাস কোড 201 Created কিনা।

৫. MockMvc এ PUT রিকোয়েস্ট টেস্ট করা

PUT রিকোয়েস্ট টেস্ট করার জন্যও একই ধরনের কনফিগারেশন ব্যবহার করা হয়:

@Test
public void testUpdateUser() throws Exception {
    String updatedUserJson = "{\"name\":\"Updated Name\",\"email\":\"updated.email@example.com\"}";

    mockMvc.perform(MockMvcRequestBuilders.put("/users/1")
                .contentType("application/json")
                .content(updatedUserJson)) // Send PUT request with updated data
                .andExpect(status().isOk()) // Assert that the response status is 200 OK
                .andExpect(MockMvcResultMatchers.jsonPath("$.name").value("Updated Name")); // Assert updated user info
}

এখানে, PUT রিকোয়েস্টের মাধ্যমে একটি ইউজারের তথ্য আপডেট করা হয়েছে এবং status().isOk() এর মাধ্যমে নিশ্চিত করা হয়েছে যে রেসপন্সের স্ট্যাটাস 200 OK।


৬. MockMvc এ DELETE রিকোয়েস্ট টেস্ট করা

DELETE রিকোয়েস্ট টেস্ট করার জন্যও ঠিক একই পদ্ধতি অনুসরণ করা হয়:

@Test
public void testDeleteUser() throws Exception {
    mockMvc.perform(MockMvcRequestBuilders.delete("/users/1")) // Send DELETE request
            .andExpect(status().isNoContent()); // Assert that the response status is 204 No Content
}

এখানে, DELETE রিকোয়েস্ট পাঠানো হয়েছে এবং status().isNoContent() এর মাধ্যমে নিশ্চিত করা হয়েছে যে রেসপন্স স্ট্যাটাস 204 No Content।


৭. MockMvc এ Exception Handling টেস্ট করা

কোনও এক্সসেপশন হ্যান্ডলিংয়ের টেস্ট করার জন্যও আপনি MockMvc ব্যবহার করতে পারেন:

@Test
public void testUserNotFound() throws Exception {
    mockMvc.perform(MockMvcRequestBuilders.get("/users/999")) // Send GET request for non-existent user
            .andExpect(status().isNotFound()); // Assert that the response status is 404 Not Found
}

এখানে, একটি এমন ইউজার ID দেয়া হয়েছে যা সার্ভারে নেই এবং এর মাধ্যমে আমরা 404 Not Found স্ট্যাটাস চেক করেছি।


৮. MockMvc এর সুবিধা

  1. Fast and Lightweight: এটি সরাসরি সার্ভার চালানোর প্রয়োজন ছাড়াই HTTP রিকোয়েস্ট টেস্ট করতে সাহায্য করে, ফলে দ্রুত টেস্টিং হয়।
  2. No need for a real server: প্রকৃত সার্ভার রান করার প্রয়োজন নেই, ফলে কম সময় এবং কম রিসোর্স ব্যবহৃত হয়।
  3. Easy to integrate: সহজেই Spring Boot অ্যাপ্লিকেশনে MockMvc ইন্টিগ্রেট করা যায়।
  4. Comprehensive testing: GET, POST, PUT, DELETE ইত্যাদি HTTP রিকোয়েস্ট টেস্ট করা যায় এবং যথাযথ রেসপন্স যাচাই করা যায়।

সারাংশ

MockMvc হল Spring Boot অ্যাপ্লিকেশনে ওয়েব লেয়ারের টেস্টিং করার জন্য একটি শক্তিশালী টুল। এটি JUnit এর সাথে ব্যবহার করে HTTP রিকোয়েস্ট পাঠানোর এবং রেসপন্স যাচাই করার সুবিধা দেয়। MockMvc এর মাধ্যমে আপনি GET, POST, PUT, DELETE রিকোয়েস্ট টেস্ট করতে পারবেন এবং সেগুলির স্ট্যাটাস এবং কনটেন্ট চেক করতে পারবেন। এটি দ্রুত এবং কার্যকরী টেস্টিং নিশ্চিত করে, যা আপনার ওয়েব লেয়ারের কার্যকারিতা নিশ্চিত করতে সাহায্য করে।


Content added By
Promotion

Are you sure to start over?

Loading...