উদাহরণ সহ Spring Testing

Spring Testing Framework - স্প্রিং (Spring) - Java Technologies

284

Spring Testing Overview

স্প্রিং ফ্রেমওয়ার্কে Testing একটি গুরুত্বপূর্ণ অংশ, যেখানে স্প্রিং অ্যাপ্লিকেশনের বিভিন্ন কম্পোনেন্ট (যেমন সার্ভিস, রেপোজিটরি, কন্ট্রোলার) টেস্ট করা হয়। স্প্রিং টেস্টিং সাধারণত JUnit, Mockito এবং Spring Test Context Framework ব্যবহার করে করা হয়। স্প্রিং টেস্টিং টেকনিক্যালি অ্যাপ্লিকেশনের বিভিন্ন লজিকাল ইউনিটগুলোকে (যেমন মেথড, ক্লাস) আলাদাভাবে পরীক্ষা করতে সহায়তা করে, এবং একত্রে কাজ করা কম্পোনেন্টগুলোর মধ্যে ইন্টিগ্রেশন টেস্টিং পরিচালনা করতে পারে।

স্প্রিং টেস্টিংয়ের মাধ্যমে আপনি অ্যাপ্লিকেশনটির সঠিকতা নিশ্চিত করতে পারেন এবং কোনো ত্রুটি থাকলে তা দ্রুত শনাক্ত করা সম্ভব হয়।


Spring Testing এর উপাদান:

  1. Unit Testing: মেথড এবং ক্লাসের সঠিক কার্যকারিতা পরীক্ষা করা।
  2. Integration Testing: কম্পোনেন্টগুলির মধ্যে ইন্টারঅ্যাকশন এবং একে অপরের সাথে সঠিকভাবে কাজ করার সক্ষমতা পরীক্ষা করা।
  3. Mocking: Mockito বা @MockBean ব্যবহার করে ডিপেনডেন্সিগুলিকে মক (mock) করা এবং পরীক্ষার জন্য প্রস্তুত করা।
  4. Context Configuration: স্প্রিং কনটেইনারের মধ্যে প্রয়োজনীয় কম্পোনেন্ট কনফিগারেশন এবং লোড করা।

Spring Testing Setup Example:

স্প্রিং টেস্টিং করার জন্য বেশ কিছু ডিপেনডেন্সি প্রয়োজন হয়। আমরা JUnit এবং Spring Boot Test এর ডিপেনডেন্সি যোগ করব।

1. pom.xml - Required Dependencies:

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

    <!-- JUnit 5 dependency -->
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-api</artifactId>
        <version>5.7.0</version>
        <scope>test</scope>
    </dependency>

    <!-- Mockito for mocking dependencies -->
    <dependency>
        <groupId>org.mockito</groupId>
        <artifactId>mockito-core</artifactId>
        <version>3.7.7</version>
        <scope>test</scope>
    </dependency>
</dependencies>

এখানে:

  • spring-boot-starter-test ডিপেনডেন্সি টেস্টিংয়ের জন্য প্রয়োজনীয় সমস্ত টুলস সরবরাহ করে, যেমন JUnit, Mockito, এবং Spring Test Context Framework
  • JUnit 5 এবং Mockito ডিপেনডেন্সি টেস্ট কেসগুলোর জন্য প্রয়োজনীয় টুলস সরবরাহ করে।

Unit Test Example (Spring Boot)

স্প্রিং অ্যাপ্লিকেশনের Unit Testing সাধারণত @SpringBootTest, @MockBean, এবং @Test অ্যানোটেশন ব্যবহার করে করা হয়।

Service Layer Testing Example:

ধরা যাক, আমরা একটি UserService ক্লাস পরীক্ষা করতে চাই, যা একটি UserRepository থেকে ডেটা নিয়ে কাজ করে।

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;

@SpringBootTest
public class UserServiceTest {

    @Autowired
    private UserService userService;

    @Test
    public void testCreateUser() {
        User user = new User("John", 30);
        User savedUser = userService.createUser(user);
        
        assertNotNull(savedUser);
        assertEquals("John", savedUser.getName());
        assertEquals(30, savedUser.getAge());
    }
}

এখানে:

  • @SpringBootTest স্প্রিং কনটেইনারের সাথে টেস্ট কনটেক্সট লোড করে।
  • @Autowired দ্বারা UserService-কে ইনজেক্ট করা হচ্ছে।
  • assertNotNull এবং assertEquals ব্যবহার করে টেস্টের ফলাফল যাচাই করা হচ্ছে।

Mocking with Mockito:

মোকিংয়ের মাধ্যমে আমরা UserRepository এর বাস্তব অবজেক্টের পরিবর্তে একটি মক অবজেক্ট ব্যবহার করে টেস্ট করতে পারি।

import org.junit.jupiter.api.Test;
import org.mockito.Mock;
import static org.mockito.Mockito.*;

public class UserServiceTest {

    @Mock
    private UserRepository userRepository;

    @Test
    public void testCreateUserWithMock() {
        User user = new User("John", 30);
        
        when(userRepository.save(user)).thenReturn(user); // Mocking repository save method
        
        UserService userService = new UserService(userRepository);
        User savedUser = userService.createUser(user);
        
        assertNotNull(savedUser);
        assertEquals("John", savedUser.getName());
    }
}

এখানে:

  • @Mock দিয়ে UserRepository এর মক অবজেক্ট তৈরি করা হয়েছে।
  • Mockito.when() ব্যবহার করে save() মেথডের আচরণ মক করা হয়েছে।
  • assertNotNull এবং assertEquals দিয়ে রিটার্ন ভ্যালু যাচাই করা হয়েছে।

Integration Test Example

স্প্রিং অ্যাপ্লিকেশনে Integration Testing করার জন্য, আমরা অ্যাপ্লিকেশন কনটেক্সট লোড করি এবং নিশ্চিত করি যে কম্পোনেন্টগুলো একে অপরের সাথে সঠিকভাবে কাজ করছে।

Integration Test with @SpringBootTest:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;

@SpringBootTest
public class UserControllerIntegrationTest {

    @Autowired
    private UserController userController;

    @Test
    public void testGetUser() {
        User user = userController.getUser("John");
        
        assertNotNull(user);
        assertEquals("John", user.getName());
    }
}

এখানে:

  • @SpringBootTest স্প্রিং কনটেইনার চালু করে এবং একে অপরের সাথে ইন্টিগ্রেটেডভাবে কাজ করার জন্য সমস্ত কম্পোনেন্ট পরীক্ষা করা হয়।
  • @Autowired দ্বারা UserController ইনজেক্ট করা হয়েছে এবং তার পর getUser() মেথড কল করে টেস্ট করা হয়েছে।

MockMvc Example for Controller Testing

স্প্রিং কন্ট্রোলারের জন্য MockMvc টুল ব্যবহার করে আমরা HTTP রিকোয়েস্ট এবং রেসপন্স মক করে কন্ট্রোলারের কাজ টেস্ট করতে পারি।

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.test.web.servlet.MockMvc;
import org.junit.jupiter.api.Test;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;

@AutoConfigureMockMvc
@SpringBootTest
public class UserControllerMockMvcTest {

    @Autowired
    private MockMvc mockMvc;

    @Test
    public void testGetUser() throws Exception {
        mockMvc.perform(get("/getUser?name=John"))
               .andExpect(status().isOk())
               .andExpect(jsonPath("$.name").value("John"));
    }
}

এখানে:

  • MockMvc টুল ব্যবহার করা হয়েছে যা HTTP রিকোয়েস্ট পাঠায় এবং কন্ট্রোলারের রেসপন্স চেক করে।
  • @AutoConfigureMockMvc স্প্রিং কনফিগারেশনে MockMvc কনফিগারেশনটি অ্যাক্টিভেট করে।

Spring Testing এর সুবিধা:

  1. Unit Testing: স্প্রিং টেস্টিংয়ের মাধ্যমে আপনি আপনার অ্যাপ্লিকেশনের প্রতিটি ইউনিট (ক্লাস, মেথড) টেস্ট করতে পারেন।
  2. Mocking: স্প্রিং টেস্টিংয়ের মাধ্যমে আপনি মক অবজেক্ট ব্যবহার করে নির্ভরশীলতার (dependencies) ইনজেকশন করতে পারেন।
  3. Integration Testing: স্প্রিং টেস্টিং অ্যাপ্লিকেশনের বিভিন্ন কম্পোনেন্টের মধ্যে ইন্টিগ্রেশন যাচাই করতে সাহায্য করে।
  4. Web Layer Testing: MockMvc দিয়ে স্প্রিং কন্ট্রোলারের HTTP রিকোয়েস্ট এবং রেসপন্স মক করে টেস্ট করা যায়।
  5. Easy Test Configuration: @SpringBootTest, @MockBean, @Autowired ইত্যাদি অ্যানোটেশন দ্বারা সহজে টেস্ট কনফিগারেশন করা যায়।

সারাংশ

স্প্রিং ফ্রেমওয়ার্কে টেস্টিং অ্যাপ্লিকেশনের বিভিন্ন অংশের কার্যকারিতা এবং একে অপরের সাথে সঠিকভাবে কাজ করার সক্ষমতা নিশ্চিত করতে সহায়তা করে। JUnit, Mockito, MockMvc, এবং Spring Test Context Framework ব্যবহার করে সহজেই স্প্রিং অ্যাপ্লিকেশন টেস্ট করা সম্ভব। স্প্রিং টেস্টিংয়ের মাধ্যমে আপনি ইউনিট টেস্ট, ইন্টিগ্রেশন টেস্ট, এবং কন্ট্রোলার টেস্টিং সহজে করতে পারেন, যা অ্যাপ্লিকেশনের সঠিকতা এবং স্থিতিশীলতা নিশ্চিত করে।

Content added By
Promotion

Are you sure to start over?

Loading...