将 HttpServletRequest 中的 remoteUser 值传递给 mockmvc 执行测试
pass remoteUser value in HttpServletRequest to mockmvc perform test
我有一个 api 电话:
@RequestMapping(value = "/course", method = RequestMethod.GET)
ResponseEntity<Object> getCourse(HttpServletRequest request, HttpServletResponse response) throwsException {
User user = userDao.getByUsername(request.getRemoteUser());
}
当我从测试 class 中调用它时,我得到的用户为 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
。那么如何将值传递给远程用户呢?
您可以使用 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 中设置 remoteUser
在 MockHttpServletRequest
使用 @WithMockUser
注释。
在build.gradle.kts
中添加依赖testImplementation("org.springframework.security:spring-security-test:4.0.4.RELEASE")
在测试中添加@WithMockUser(username = "user")
@WebMvcTest(controllers = [DossierController::class])
internal class DossierControllerTest {
@MockkBean
lateinit var request: MockHttpServletRequest
@Test
@WithMockUser(username = "user")
fun createDossierTest() {
}
}
我有一个 api 电话:
@RequestMapping(value = "/course", method = RequestMethod.GET)
ResponseEntity<Object> getCourse(HttpServletRequest request, HttpServletResponse response) throwsException {
User user = userDao.getByUsername(request.getRemoteUser());
}
当我从测试 class 中调用它时,我得到的用户为 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
。那么如何将值传递给远程用户呢?
您可以使用 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 中设置 remoteUser
在 MockHttpServletRequest
使用 @WithMockUser
注释。
在
中添加依赖build.gradle.kts
testImplementation("org.springframework.security:spring-security-test:4.0.4.RELEASE")
在测试中添加
@WithMockUser(username = "user")
@WebMvcTest(controllers = [DossierController::class])
internal class DossierControllerTest {
@MockkBean
lateinit var request: MockHttpServletRequest
@Test
@WithMockUser(username = "user")
fun createDossierTest() {
}
}