Skip to content

Commit

Permalink
[junwoo.choi] feat : (testCode) queryParam initBinding
Browse files Browse the repository at this point in the history
  • Loading branch information
mike6321 committed Jul 7, 2022
1 parent 2cc1d8c commit 970023f
Show file tree
Hide file tree
Showing 4 changed files with 157 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package com.example.testcode.study.request_body_test;

import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class RequestController {

@GetMapping("/primitive-test")
// public ResponseEntity<RequestDto> getTest(@RequestBody RequestDto requestDto) {
public ResponseEntity<RequestDto> getTest(RequestDto requestDto) {
ResponseEntity<RequestDto> ok = ResponseEntity.ok(requestDto);
return ok;
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
package com.example.testcode.study.request_body_test;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.http.MediaType;
import org.springframework.http.converter.ByteArrayHttpMessageConverter;
import org.springframework.http.converter.FormHttpMessageConverter;
import org.springframework.http.converter.StringHttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.http.converter.xml.SourceHttpMessageConverter;
import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.ResultActions;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.method.annotation.RequestParamMapMethodArgumentResolver;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.method.support.HandlerMethodArgumentResolverComposite;
import org.springframework.web.servlet.mvc.method.annotation.HttpEntityMethodProcessor;
import org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor;
import org.springframework.web.servlet.mvc.method.annotation.ServletModelAttributeMethodProcessor;

import java.util.Arrays;
import java.util.List;

import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

@ExtendWith(value = MockitoExtension.class)
@ActiveProfiles("test")
public class RequestControllerUnitTest {

private static final String PATH = "/primitive-test";
private MockMvc mockMvc;
private ObjectMapper objectMapper;
@InjectMocks
private RequestController requestController;

@BeforeEach
void setUp() {
setUpMockMvcStandAlone();
setUpObjectMapper();
}

private void setUpObjectMapper() {
objectMapper= new ObjectMapper().registerModule(new JavaTimeModule());
}

private void setUpMockMvcStandAlone() {
// HandlerMethodArgumentResolverComposite handlerMethodArgumentResolverComposite = new HandlerMethodArgumentResolverComposite();
// handlerMethodArgumentResolverComposite.clear();
// ServletModelAttributeMethodProcessor servletModelAttributeMethodProcessor = new ServletModelAttributeMethodProcessor(false);
// handlerMethodArgumentResolverComposite.addResolvers(new RequestResponseBodyMethodProcessor(List.of(new MappingJackson2HttpMessageConverter())));
// handlerMethodArgumentResolverComposite.addResolver(new HandlerMethodArgumentResolverComposite());
// handlerMethodArgumentResolverComposite.addResolver(servletModelAttributeMethodProcessor);
mockMvc = MockMvcBuilders.standaloneSetup(requestController)
.setControllerAdvice(WebControllerAdvice.class)
// .setCustomArgumentResolvers(new HandlerMethodArgumentResolverComposite())
// .setMessageConverters(new MappingJackson2HttpMessageConverter())
// .setCustomArgumentResolvers(handlerMethodArgumentResolverComposite)
.build();
}

@Test
public void controller_content_test() throws Exception {
RequestDto requestDto = new RequestDto("junwoo", 1, 2);
String requestBody = objectMapper.writeValueAsString(requestDto);
String responseBody = objectMapper.writeValueAsString(requestDto);
ResultActions perform = mockMvc.perform(get(PATH)
.queryParam("requestDto", requestBody)
.contentType(MediaType.APPLICATION_JSON));

perform.andExpect(status().isOk())
.andExpect(content().contentType(MediaType.APPLICATION_JSON))
// .andExpect(content().string(responseBody))
.andDo(print());
}

@Test
public void controller_params_test() throws Exception {
RequestDto requestDto = new RequestDto("junwoo", 1, 2);
String responseBody = objectMapper.writeValueAsString(requestDto);
MultiValueMap<String, String> params = new LinkedMultiValueMap<>();
params.put("name", Arrays.asList("junwoo"));
params.put("ps", Arrays.asList("1"));
params.put("pn", Arrays.asList("2"));

ResultActions perform = mockMvc.perform(get(PATH)
.params(params)
.contentType(MediaType.APPLICATION_JSON)
.accept(MediaType.APPLICATION_JSON));

perform.andExpect(status().isOk())
.andDo(print())
.andExpect(content().contentType(MediaType.APPLICATION_JSON))
.andExpect(content().json(responseBody));
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package com.example.testcode.study.request_body_test;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

@Getter
//@Setter
@AllArgsConstructor
@NoArgsConstructor
public class RequestDto {

private String name;
private int ps;
private int pn;

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.example.testcode.study.request_body_test;

import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.RestControllerAdvice;

@RestControllerAdvice
public class WebControllerAdvice {

@InitBinder
public void initBinder(WebDataBinder binder) {
binder.initDirectFieldAccess();
}

}

0 comments on commit 970023f

Please sign in to comment.