大佬教程收集整理的这篇文章主要介绍了Spring Boot仅在单元测试中返回错误的状态代码,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
问题是因为我的控制器和服务是异步的,所以我的单元测试没有等待正确的响应。
将我的单元测试更改为:
@H_154_7@mvcResult result = mvc.perform(post("/API/users/new") .content(TestHelpers.convertToJson(registromock)) .ContentType(TestHelpers.getJsonMediaType())) .andReturn(); mvc.perform(asyncdispatch(result)) .andExpect(status().isCreated());
我正在使用Spring Boot开发REST API。
我有一个控制器来创建一个新用户,该用户创建后会响应201(创建)。响应没有正文内容。
使用Postman或任何浏览器,我收到201的响应。但是,当我尝试使用单元测试(mockito)时,响应为200。
这是我的代码:
控制器 :
public CompletableFuture<ResponseEntity<Void>> registerNewUser(
@requestBody @Valid RegisterUserDto newUser
) throws ExecutionException,InterruptedException {
// user service return a completable future void
return userservice.registerNewUser(newUser).thenApply(u -> new ResponseEntity<>(u,httpStatus.CREATED));
}
注册过程完成后,用户服务将返回一个将来的空虚空间。
@Async
CompletableFuture<Void> registerNewUser(NewUserDto newUserDto) throws ExecutionException,InterruptedException;
然后,在我的单元测试中,我有以下代码:
@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfiguremockR_329_11845@vc
public class UsersControllerTest {
@Autowired
private mockR_329_11845@vc mvc;
@mock
private Usersservice userservice;
@Injectmocks
private UsersControllers usersController;
@Before
public void init() {
mockitoAnnotations.initmocks(this);
this.mvc = mockR_329_11845@vcBuilders.standalonesetup(usersController).build();
}
@Test
public void mustCreateANewUser() throws Exception {
NewUserDto usermock = new NewUserDto("firstname","lastname","login","password");
when(userservice.registerNewUser(any(NewUserDto.class)))
.thenReturn(CompletableFuture.completedFuture(null));
mvc.perform(post("/api/users/new")
.content(TestHelpers.convertToJson(usermock))
.contentType(TestHelpers.getJsonMediaType()))
.andExpect(status().isCreated());
}
}
TestHelpers.convertToJson和TestHelpers.getJsonMediaType是静态方法。
public static MediaType getJsonMediaType() {
return new MediaType(MediaType.APPLICATION_JSON.getType(),MediaType.APPLICATION_JSON.getSubtype(),Charset.forName("utf8"));
}
public static String convertToJson(Object o) throws IOException {
ObjectMapper mapper = new ObjectMapper();
return mapper.writeValueAsString(o);
}
我不明白为什么单元测试的响应代码是200。在控制器,服务或控制器建议的任何部分中,我都有200的响应。
以上是大佬教程为你收集整理的Spring Boot仅在单元测试中返回错误的状态代码全部内容,希望文章能够帮你解决Spring Boot仅在单元测试中返回错误的状态代码所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。