繁体   English   中英

如何在 Spring Boot 控制器测试中测试 @ModelAttrbiute?

[英]How to test @ModelAttrbiute in spring boot controller test?

我在测试使用 @ModelAttribute 的端点时遇到问题我不太清楚如何使用此注释进行测试,测试响应是java.lang.AssertionError: Content type not set ,这是控制器方法:

@PostMapping
public ResponseEntity<?> createTestimonials(@ModelAttribute(name = "testimonialsCreationDto") @Valid TestimonialsCreationDto testimonialsCreationDto) {
        try {
             return ResponseEntity.status(HttpStatus.CREATED).body(iTestimonials.createTestimonials(testimonialsCreationDto));
        } catch (Exception e) {
            return ResponseEntity.status(HttpStatus.CONFLICT).body(e.getMessage());
        }
    }

这是测试:

@Test
    void createTestimonials() throws Exception {
        //Given
        String name = "Testimonio 159";
        String contentTestimonial = name + " content!";
        TestimonialsCreationDto testimonialsCreationDto = new TestimonialsCreationDto();
        testimonialsCreationDto.setName(name);
        testimonialsCreationDto.setContent(contentTestimonial);
        //When
        mockMvc.perform(post("/testimonials")
                .flashAttr("testimonialsCreationDto", testimonialsCreationDto)
                .contentType(MediaType.MULTIPART_FORM_DATA)
                .content(objectMapper.writeValueAsString(testimonialsCreationDto))
                .characterEncoding("UTF-8"))
        //Then
                .andExpect(status().isCreated())
                .andExpect(content().contentType(MediaType.APPLICATION_JSON))
                .andExpect(jsonPath("$.name", is(name)))
                .andExpect(jsonPath("$.content", is(contentTestimonial)));
        verify(testimonialsService).createTestimonials(any());
    }
MockHttpServletRequest:
      HTTP Method = POST
      Request URI = /testimonials
       Parameters = {}
          Headers = [Content-Type:"multipart/form-data;charset=UTF-8", Content-Length:"74"]
             Body = {"name":"Testimonio 159","image":null,"content":"Testimonio 159 content!"}
    Session Attrs = {}

MockHttpServletResponse:
           Status = 200 ---> IDK why response with 200 code
    Error message = null
          Headers = []
     Content type = null
             Body = 
    Forwarded URL = null
   Redirected URL = null
          Cookies = []

java.lang.AssertionError:未设置内容类型

您必须将path值添加到 PostMapping :

@PostMapping(path = "/testimonials", produces = MediaType.MULTIPART_FORM_DATA)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM