代码之家  ›  专栏  ›  技术社区  ›  Jacob

控制台打印语句在Spring Boot微服务的JUnit测试中不起作用

  •  0
  • Jacob  · 技术社区  · 7 年前

    我正在尝试为我的spring boot微服务创建junit测试。我需要查看执行的操作的响应或结果。当我像这样添加时,它不会在我的控制台中打印。

    @Test
    public void retrieveDetailsForCourse() throws Exception {
    
        Mockito.when(
                studentService.retrieveCourse(Mockito.anyString(),
                        Mockito.anyString())).thenReturn(mockCourse);
    
        RequestBuilder requestBuilder = MockMvcRequestBuilders.get(
                "/students/Student1/courses/Course1").accept(
                MediaType.APPLICATION_JSON);
    
        MvcResult result = mockMvc.perform(requestBuilder).andReturn();
    
        System.out.println(result.getResponse());
    
    }
    

    如何从结果中检索响应/结果?

    1 回复  |  直到 7 年前
        1
  •  2
  •   glytching    7 年前

    你可以用 andDo(print()) 要将请求和响应打印到控制台,例如:

    MvcResult result = mockMvc.perform(requestBuilder)
       .andDo(print())
       .andReturn();
    

    您可能还需要针对响应添加一些断言,例如:

    MvcResult result = mockMvc.perform(requestBuilder)
       .andExpect(status().isOk())
       .andExpect(content().contentType(...))
       .andExpect(content().string("..."));
    

    这是mockmvc测试的标准方法,但是在您的测试用例中可能还有其他错误。使用 andReturn() 随着 result.getResponse().getContentAsString() 应该 打印出响应,如果您没有看到任何打印内容,则:

    • 响应为空
    • 这个 perform() 调用引发了异常,从而导致 System.out 打电话。