当前位置: 首页 > 知识库问答 >
问题:

Spring Junit测试状态代码为200的空主体

袁河
2023-03-14

我这样做是为了尝试我的UserRestController,但我在响应中什么也没有得到,还有一个200状态码。

我尝试了很多方法,但都没有找到答案。。。

这是我用来测试分类控制器的代码

@RunWith(SpringRunner.class)
@WebMvcTest(CategoryRestController.class)
public class CategoryControllerTest {

    @Autowired
    private MockMvc mockMvc;

    @MockBean
    private CategoryService service;

    @Test
    public void testGetAllCategories() throws Exception {
        when(service.getCategories(null)).thenReturn(CompletableFuture.completedFuture(new PageImpl<>(Arrays.asList(new Category("Art"), new Category("Development")))));
        mockMvc.perform(get("/api/v1/challenge/category/all")
                .accept(MediaType.APPLICATION_JSON))
                .andExpect(jsonPath("$", hasSize(4)))
                .andDo(print());
    }
}

当我运行单元测试时,会得到以下响应:

MockHttpServletRequest:
      HTTP Method = GET
      Request URI = /api/v1/challenge/category/all
       Parameters = {}
          Headers = [Accept:"application/json"]
             Body = null
    Session Attrs = {}

Handler:
             Type = com.exalow.daify.controllers.v1.CategoryRestController
           Method = com.exalow.daify.controllers.v1.CategoryRestController#getCategories(Pageable)

Async:
    Async started = false
     Async result = null

Resolved Exception:
             Type = null

ModelAndView:
        View name = null
             View = null
            Model = null

FlashMap:
       Attributes = null

MockHttpServletResponse:
           Status = 200
    Error message = null
          Headers = []
     Content type = null
             Body = 
    Forwarded URL = null
   Redirected URL = null
          Cookies = []

共有1个答案

安轶
2023-03-14

由于您没有显示控制器的代码,我假设控制器的方法CategoryRestController#getCategories(Pageable)具有以下实现:

{
    return ResponseEntity.ok(service.getCategories(null).get()).build();
}

请注意,我正在调用get()方法,该方法在Controller的响应对象生成之前由service.get类别(null)返回。这就是使CompletableFuture检索其任务结果的原因。作为一个例子,以一种简化的方式,如果您创建它来执行对远程服务的异步调用,那么一旦您调用get()加盟()方法,y将被执行。

值得一提的是,参数作为参数从控制器传递到服务。getCategories(…) 方法必须与测试中指定的匹配,以便在测试中编写以下语句时返回对象存根:

当(service.get类别(null)). then返回(完整的uture.completed未来(新页面Impl

 类似资料:
  • TLDR;如何使用Spring在正文中发送文本消息以及304状态代码? 背景 我正在使用Spring Boot编写一个REST API。在某些endpoint中,我想返回: 任一状态 ,身体, 或状态 未修改,正文 我的endpoint使用(在kotlin中)的方式如下: 问题 每当我用状态代码创建< code>ResponseEntity时!= 200,正文不发(空正文)。将< code>Htt

  • 我使用Spring中的webClient从GraphQL WebService中获取数据。此代码位于一个泛型方法中,该方法将响应体解码为不同类型的对象。如果响应是预期的类型,则它运行良好。 现在我想处理来自WebService的错误。因此,我的问题与此非常相似:Spring Webflux:Webclient:Get body on error我发现建议使用onStatus,但我的问题是,即使re

  • 我在Android平台上使用谷歌排球。我遇到了一个问题,其中错误空对于我正在使用的RESTful API,我需要确定Http状态代码,该代码通常以401(SC_UNAUTHORIZED)或500(SC_INTERNAL_SERVER_ERROR)的形式到达,我可以偶尔通过以下方式进行检查: 这将引发因为为空。 如何确定错误函数中的 Http 状态代码? 或者,如何确保< code>onErrorR

  • 我正在使用 webClient 调用调用服务 1,该服务 1 调用服务 2,然后服务 2 从数据库中获取数据并返回它们。问题:我有 onStatus 来捕获错误的响应,因此响应具有 400 或 500 个状态代码。代码示例: 在一些边缘情况下,响应带有200个状态代码,响应体有失败消息和失败原因。那么我如何检索它,然后用该失败消息抛出异常(在其他服务返回的响应对象中)。因为它试图映射并抛出错误。目

  • 问题内容: 我有一台服务器,从同一URL返回HTTP状态代码200、201和202。在Chrome浏览器中,我已经通过“网络”调试面板确认了状态代码是否符合我的预期(即200、201或202)。我依靠该状态码来确定下一步。 我希望jQuery(1.5.2版)AJAX的回调请求设置为服务器发送的状态代码。但是,即使服务器发送的代码是201或202,状态代码也始终为200。 换句话说,无论服务器发送什

  • 我使用axios与自己的API(不是用NodeJS编写的)通信。 当我发布一个非简单的请求时,axios总是直接转到控制台中显示网络错误的catch块,即使有2个成功的Http请求。 错误:网络错误堆栈跟踪:createerror@http://localhost:3000/statist/js/bundle.js:1634:15 handleerror@http://localhost:3000