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
请有人帮助我,我不知道是什么问题,我正在尝试对此方法进行测试,但它总是给我 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