【问题标题】:pass remoteUser value in HttpServletRequest to mockmvc perform test将 HttpServletRequest 中的 remoteUser 值传递给 mockmvc 执行测试
【发布时间】:2016-05-11 19:14:31
【问题描述】:

我有一个 api 调用:

@RequestMapping(value = "/course", method = RequestMethod.GET)
ResponseEntity<Object> getCourse(HttpServletRequest request, HttpServletResponse response) throwsException {
        User user = userDao.getByUsername(request.getRemoteUser());

}

当我从测试类调用它时,我让用户为 null:

HttpServletRequest request = Mockito.mock(HttpServletRequest.class);
 Mockito.when(request.getRemoteUser()).thenReturn("test1");

    MvcResult result =  mockMvc.perform( get( "/course")
                    .contentType(MediaType.APPLICATION_JSON)
                    .andExpect( status().isOk() )
                    .andExpect( content().contentType( "application/json;charset=UTF-8" ) )
                    .andReturn();

当我调试请求对象时,我可以看到remoteUser=null。那么如何将值传递给远程用户?

【问题讨论】:

    标签: spring mockito spring-test spring-test-mvc


    【解决方案1】:

    您可以使用RequestPostProcessor 以您想要的任何方式修改MockHttpServletRequest。在你的情况下:

    mockMvc.perform(get("/course").with(request -> {
                        request.setRemoteUser("USER");
                        return request;
                    })...
    

    如果你被旧版本的 Java 卡住了:

    mockMvc.perform(get("/course").with(new RequestPostProcessor() {
                @Override
                public MockHttpServletRequest postProcessRequest(MockHttpServletRequest request) {
                    request.setRemoteUser("USER");
                    return request;
                }
            })...
    

    【讨论】:

    • 我正试图弄清楚如何对 Kotlin 做同样的事情。
    【解决方案2】:

    在 Kotlin 中,要在 MockHttpServletRequest 中设置 remoteUser,请使用 @WithMockUser 注释。

    1. build.gradle.kts中添加依赖testImplementation("org.springframework.security:spring-security-test:4.0.4.RELEASE")

    2. 在测试中添加@WithMockUser(username = "user")

    @WebMvcTest(controllers = [DossierController::class])
    internal class DossierControllerTest {
      
      @MockkBean
      lateinit var request: MockHttpServletRequest
      
      @Test
      @WithMockUser(username = "user")
      fun createDossierTest() {
    
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-11-27
      • 2022-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多