java.lang.AssertionError: Status : 404

java.lang.AssertionError: Status : 404

请有人帮助我,我不知道是什么问题,我正在尝试对此方法进行测试,但它总是给我 java.lang.AssertionError:状态 预期:200 实际:400

  @PutMapping("/infoUtile/update/{id}")
            public Map<String,Object> editActualite(@PathVariable Long id, @Valid @RequestParam ArrayList<Long> idDeleted,
                                                    @Valid @RequestParam String content, @Valid @RequestParam String description){
                InformationUtile info = this.infoUtileService.getInfoUtileById(id);

                    info.setContent(content);
                    info.setDescription(description);
                    info.setDate(new Date());

                if(idDeleted.size() != 0) {
                    for (int i = 0; i < idDeleted.size(); i++) {
                        this.mediaService.deleteMedia(idDeleted.get(i));
                    }
                }
                InformationUtile i = this.infoUtileService.addOrEditInfoUtile(info);
                return getInfoUtileWeb(i);
            }

这是我尝试实施的测试

 @Test
    public void update() throws Exception {
        InformationUtile informationUtile = new InformationUtile();
        informationUtile.setId(1);
        informationUtile.setContent("oumaima");
        informationUtile.setDescription("test");
        Media medias = new Media();
        medias.setId(1);
        medias.setType("image/png");
        medias.setUrl("C:\files\actualite\32769\adobexd.png");
        List<Media> allMedias = new ArrayList<Media>();
        allMedias.add(medias);
        informationUtile.setMedias(allMedias);
        User user = new User();
        user.setId(1);
        user.setNom("oumaima");
        informationUtile.setUser(user);
        ArrayList<Long> idDeleted = new ArrayList<>();
        idDeleted.add(0L);
        Mockito.when(informationUtileService.getInfoUtileById(Mockito.<Long>any())).thenReturn(new InformationUtile());
        Mockito.when(informationUtileService.addOrEditInfoUtile(Mockito.any(InformationUtile .class))).thenReturn(informationUtile);
        mockMvc.perform(put("/infoUtile/update/{id}",informationUtile.getId()).requestAttr("idDeleted",idDeleted)
                .param("content",informationUtile.getContent())
                .param("description",informationUtile.getDescription())
       )
                .andExpect(status().isOk());
        verify(informationUtileService, times(1)).getInfoUtileById(informationUtile.getId());
        verify(informationUtileService, times(1)).addOrEditInfoUtile(informationUtile);
        verifyNoMoreInteractions(informationUtileService);
    }

您正在端点 @Valid @RequestParam ArrayList<Long> idDeleted, @Valid @RequestParam String content, @Valid @RequestParam String description 定义三个请求参数,这意味着它们是 url 之后的查询参数,例如http://localhost:8080/?idDeleted=1&idDeleted=2&content=Hello&description=Duke.

HTTP 404 表示 Spring 找不到您的请求的处理程序,这意味着客户端(在您的情况下 MockMvc)格式错误 URL.

在您当前的 MockMvc 请求设置中,您使用 .requestAttr() 作为 idDeleted 请求参数。

全部应该是.param():

mockMvc
  .perform(put("/infoUtile/update/{id}",informationUtile.getId())
    .param("idDeleted", idDeletedOne , idDeletedTwo)
    .param("content",informationUtile.getContent())
    .param("description",informationUtile.getDescription())
  )

PS:我想这里需要 @Valid 注释,因为您没有检查,例如具有 Bean Validation 注释以验证内容的有效载荷。

更新: .param().parm(String name, String... values) 超载,因此您可以使用 .param("idDeleted", idDeletedOne, idDeletedTwo) 传递 idDeleted 列表或者您可以传递一个 String[],所有 Long 值都表示为 String