[英]In a SpringBoot project with MVC REST API is returning 406 response
[英]SpringBoot MVC Post Response Entity returning null
响应enitity应该返回一个http状态为OK / 200的新ResponseEntity。 但是,在我测试期间,它返回null,我可以看到它被设置为null但不明白为什么甚至如何。 我确信这是一件很简单的事我错过了但却无法看到它。
从图像中可以看出,create var为null,但是,Mockitio应该将其设置为createBlogPostResponse1,所以我不确定为什么设置null。
感谢您提供任何信息和帮助。
测试
public static ResponseEntity createBlogPostResponse1 = new ResponseEntity(HttpStatus.OK);
@Test
public void createNewBlogPost() throws Exception {
String url = TestHelper.URL + "/blogPost/createNewBlogPost";
when(postService.createNewBlogPost(blogPost1)).thenReturn(TestHelper.createBlogPostResponse1);
mockMvc.perform(post(url)
.contentType(MediaType.APPLICATION_JSON_UTF8)
.content(TestHelper.asJsonString(blogPost1)))
.andExpect(status().isOk())
.andReturn();
verify(postService, times(1)).createNewBlogPost(blogPost1);
verifyNoMoreInteractions(postService);
}
调节器
ResponseEntity create = postService.createNewBlogPost(cleanBlogPost);
服务
@Override
public ResponseEntity createNewBlogPost(BlogPost createNewBlogPost) {
return new ResponseEntity(HttpStatus.OK);
}
正如JBnizet mockito在内部使用equals
方法来匹配模拟方法调用的参数一样。 尝试重写BlogPost
类的equals
方法。 如果您不想覆盖equals
并且只想匹配模拟上的任何方法调用 - 请使用any()
匹配器:
@Test
public void createNewBlogPost() throws Exception {
String url = TestHelper.URL + "/blogPost/createNewBlogPost";
when(postService.createNewBlogPost(Mockito.any(BlogPost.class))).thenReturn(TestHelper.createBlogPostResponse1);
mockMvc.perform(post(url)
.contentType(MediaType.APPLICATION_JSON_UTF8)
.content(TestHelper.asJsonString(blogPost1)))
.andExpect(status().isOk())
.andReturn();
verify(postService, times(1)).createNewBlogPost(Mockito.any(BlogPost.class));
verifyNoMoreInteractions(postService);
}
如果你想获得一些关于匹配器的基本知识,请尝试本教程。
正如Mockito所说,依赖于equals()
进行参数匹配,但是重写equals()
以使单元测试成功通常不是一个好主意。 equals()
重写必须对相关类有意义。 如果重写是有道理的,那就去吧。 否则,这里有一个替代方案,你可以使用any()
匹配器来检查param属性值的内容,例如:
when(postService.createNewBlogPost(Mockito.any(BlogPost.class)))
.then( answer -> {
BlogPost post = (BlogPost) invocation.getArguments()[0]; // get the first arg
Assert.assertEquals(blogPost1.getFoo(), post.getFoo());
Assert.assertEquals(blogPost1.getBar(), post.getBar());
return TestHelper.createBlogPostResponse1();
});
虽然对于断言没有在对象断言上使用equals()
我更喜欢AssertJ。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.