java .lang.AssertionError: Статус: 404 - PullRequest
0 голосов
/ 19 июня 2020

Пожалуйста, помогите мне, я не могу понять, в чем проблема, я пытаюсь реализовать тест для этого метода, но он всегда дает мне 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);
    }

1 Ответ

0 голосов
/ 19 июня 2020

Вы определяете три параметра запроса в своей конечной точке @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), поэтому вы можете передать свой список idDeleted либо .param("idDeleted", idDeletedOne, idDeletedTwo), либо String[] со всеми своими Long значения представлены как String

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...