স্প্রিং বুট প্রজেক্ট প্রথমে আমাদের তৈরি করতে হবে । ডিপেন্ডেন্সি হিসেবে আমাদের দিতে হবে - 

 

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>

 

আমারা এখন *এক্তা ইউজার এ পি আই এর জন্য ইউনিট টেস্টিং লিখব । 

 সব গুলা ধাপ একের পর এক দেয়া হল ঃ 







import com.fasterxml.jackson.databind.ObjectMapper;
import com.tnpay.demoservice.demo.dto.request.UserRequestDto;
import com.tnpay.demoservice.demo.entity.User;
import com.tnpay.demoservice.demo.service.UserService;
import org.junit.jupiter.api.BeforeEach;
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.boot.test.mock.mockito.MockBean;
import org.springframework.test.web.servlet.MockMvc;

import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;





@WebMvcTest(UserController.class)
public class UserControllerTest {
    private static final String END_POINT_PATH="/api/user";
    @Autowired private MockMvc mockMvc;
    @Autowired private ObjectMapper objectMapper;
    @MockBean UserService userService;
    @MockBean UserController userController;

    @BeforeEach
    void setUp(){
        userService = mock(UserService.class);

    }

    @Test
    void testAddShouldReturn400BadRequest() throws Exception {
        UserRequestDto newUser = UserRequestDto.builder()
                .name("")
                .email("")
                .phone("")
                .build();

        String requestBody = objectMapper.writeValueAsString(newUser);
        mockMvc.perform(post(END_POINT_PATH).contentType("application/json")
                .content(requestBody))
                .andExpect(status().isBadRequest())
                .andDo(print());
    }

    @Test
    void testAddShouldReturn201Created() throws Exception {
        // Prepare a DTO for the request
        UserRequestDto newDto = UserRequestDto.builder()
                .name("John Doe")
                .email("john@example.com")
                .phone("01753155400")
                .build();

        // Mock the behavior of your service's create method
        User createdEntity = User.builder()
                .name(newDto.getName())
                .email(newDto.getEmail())
                .phone(newDto.getPhone())
                .build();

        when(userService.create(any(UserRequestDto.class))).thenReturn(createdEntity);
        // Convert the DTO to JSON
        String requestBody = objectMapper.writeValueAsString(newDto);
        mockMvc.perform(post(END_POINT_PATH)
                        .contentType("application/json")
                        .content(requestBody))
                .andExpect(status().isOk())
                .andDo(print());
    }

    @Test
    void testGetByIdReturn200OK() throws Exception{
        Long userId = 1L;
        User user = User.builder()
                .name("Test User")
                .email("test@example.com")
                .phone("1234567890")
                .build();
        user.setId(userId);
        when(userService.getSingle(userId)).thenReturn(user);
        mockMvc.perform(get(END_POINT_PATH+"/{id}", userId))
                .andExpect(status().isOk())
                .andDo(print());
    }

}


sdfsdf এখন আউটপুট ভিজুয়ালাইজ করার জন্য আমরা 

<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.8.11</version>
<executions>
<execution>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<execution>
<id>report</id>
<phase>prepare-package</phase>
<goals>
<goal>report</goal>
</goals>
</execution>
</executions>
</plugin>


এটা অ্যাড করব ।


এর পর রান করার জন্য ঃ mvn clean verify 

এই কমান্ড টি চালাব । 

 

তারপর প্রজেক্ট এর ঃ \target\site\jacoco

এই লোকেশন এ গিয়ে index.htmlএই ফাইল টি রান করব ।