여니의 프로그래밍 study/Spring & Spring Boot

[스프링부트] 값 넘겨주는 유닛 테스트코드 작성하기(RequestParam)

여니's 2022. 3. 21. 11:20

@RequestParam은 

외부에서 API로 넘긴 파라미터를 가져오는 어노테이션입니다.

@RequestParam("가져올 데이터의 이름") [데이터타입] [가져온 데이터를 담을 변수] 

 

HelloResponseDto.java

응답 데이터를 받을 dto 클래스입니다.

 

package com.yeony.web.springbootwebproject.web.dto;

import lombok.Getter;
import lombok.RequiredArgsConstructor;

@Getter
@RequiredArgsConstructor
public class HelloResponseDto {
    private final String name1;
    private final int amount1;

}

 

 

 

HelloResponseDtoTest.java

dto에 적용된 롬복이 잘 작동하는지

확인하기 위한 테스트 코드입니다.

package com.yeony.web.springbootwebproject.web.dto;

import org.junit.Test;

import static org.assertj.core.api.AssertionsForInterfaceTypes.assertThat;

public class HelloResponseDtoTest {

    @Test
    public void 롬북_기능_테스트(){
        //given
        String name="yeony";
        int amount=1000;

        //when
        HelloResponseDto dto=new HelloResponseDto(name,amount);

        //then
        assertThat(dto.getName1()).isEqualTo(name);
        assertThat(dto.getAmount1()).isEqualTo(amount);
    }
}

 

HelloController.java

새로 만든 ResponseDto를 사용하기 위해

코드를 추가합니다.

외부에서 name1이라는 이름으로 넘긴 파라미터를 변수 Name에 저장합니다.

 

package com.yeony.web.springbootwebproject.web;

import com.yeony.web.springbootwebproject.web.dto.HelloResponseDto;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {
    @GetMapping("/hello")
    public String hello(){
        return "hello";
    }

    @GetMapping("/hello/dto")
    public HelloResponseDto helloResponseDto(@RequestParam("name1") String name,
                                             @RequestParam("amount1") int amount){
        return new HelloResponseDto(name,amount);
    }

}

 

HelloControllerTest.java

package com.yeony.web.springbootwebproject.web;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import static org.hamcrest.Matchers.is;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;

@RunWith(SpringRunner.class)
@WebMvcTest(controllers = HelloController.class)
public class HelloControllerTest {
    @Autowired
    private MockMvc mvc;

    @Test
    public void hello가_리턴된다() throws Exception {
        String hello="hello";
        mvc.perform(MockMvcRequestBuilders.get("/hello"))
                .andExpect(status().isOk())
                .andExpect(content().string(hello));
    }

    @Test
    public void helloDto가_리턴된다() throws Exception{
        String name="yeony";
        int amount=1000;
        mvc.perform(
                MockMvcRequestBuilders.get("/hello/dto")
                        .param("name1",name)
                        .param("amount1",String.valueOf(amount)))
                .andExpect(status().isOk())
                .andExpect(jsonPath("$.name1",is(name)))
                .andExpect(jsonPath("$.amount1",is(amount)));

    }
}

 


참고서적 : 스프링 부트와 AWS로 혼자 구현하는 웹 서비스