程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Spring Boot仅在单元测试中返回错误的状态代码大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决Spring Boot仅在单元测试中返回错误的状态代码?

开发过程中遇到Spring Boot仅在单元测试中返回错误的状态代码的问题如何解决?下面主要结合日常开发的经验,给出你关于Spring Boot仅在单元测试中返回错误的状态代码的解决方法建议,希望对你解决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,请注明来意。