programing

MockMvc가 항상 빈 콘텐츠()를 반환하는 이유는 무엇입니까?

telebox 2023. 7. 21. 21:32
반응형

MockMvc가 항상 빈 콘텐츠()를 반환하는 이유는 무엇입니까?

나는 mockMvc로 나의 rest api를 테스트하려고 합니다.

mockMvc.perform(get("/users/1/mobile")
        .accept(MediaType.APPLICATION_JSON))
        .andExpect(status().isOk())
        .andDo(print())
        .andExpect(content().string("iPhone"))

다음 이유로 인해 테스트 실패:

java.lang.AssertionError: Response content 
Expected :iPhone
Actual   :

의 출력에서print()API가 실제로 예상 문자열 "아이폰"을 반환했다는 것을 알 수 있습니다.

ModelAndView:
        View name = users/1/mobile
             View = null
        Attribute = treeNode
            value = "iPhone"
           errors = []

그리고 위의 빈 "실제"는 아래의 빈 "본체"에 의해 발생한다고 생각합니다.

MockHttpServletResponse:
           Status = 200
    Error message = null
          Headers = {}
     Content type = null
             Body = 
    Forwarded URL = users/1/mobile
   Redirected URL = null
          Cookies = []

제 질문은 다음과 같습니다.

  1. 왜죠MockHttpServletResponse's본문이 비어 있습니다.
  2. API의 응답을 올바르게 테스트하려면 어떻게 해야 합니까?

작업 방법(사용하는 방법)@RequestMapping주석) 인스턴스 반환ModelAndView아니면 당신과 함께 일하는 것.Model함수를 사용하여 테스트해야 합니다.

.andExpect(MockMvcResultMatchers.model().attribute("phone", "iPhone"))
.andExpect(MockMvcResultMatchers.model().size(1))

MockMvcResultMatchers#content REST 조치 방법(REST 조치 방법)에 적합합니다.@RequestBody주석).


Spring MVC 및 Spring REST 컨트롤러 테스트에 대해 더 잘 이해하려면 다음 링크를 확인하십시오.

이 오류에 대한 또 다른 이유를 덧붙이자면, 그것을 발견하는 데 꼬박 하루가 걸렸습니다.저는 수행 방법을 사용하여 mockito와 mockmvc 클래스를 사용하여 APIT 테스트를 성공적으로 만들었습니다.그런 다음 코드를 복사하여 다른 서비스를 생성했고 저는 빈 몸을 반복적으로 얻기 시작했습니다.

그럼에도 불구하고, 결국 저는 한 프로젝트에서 다른 프로젝트로 복사된 각 클래스를 비교하기로 결정했습니다.내가 찾은 유일한 차이점은@EqualsAndHashCode새 컨트롤러에 의해 수신되는 내 요청 DTO의 주석.

따라서 권장 사항은 다음과 같습니다.@EqualsAndHashCodeDTO 클래스의 주석입니다.

언급URL : https://stackoverflow.com/questions/40067068/why-does-mockmvc-always-return-empty-content

반응형