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

将HttpServletRequest中的remoteUser值传递给mockmvc执行测试

伏子辰
2023-03-14

我有一个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。那么,我如何将值传递给远程用户呢?

共有2个答案

田冥夜
2023-03-14

在Kotlin中,要在MockHttpServletRequest中设置remoteUser,请使用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() {
    
      }
    }
    

  • 师腾
    2023-03-14

    您可以使用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;
                }
            })...
    
     类似资料:
    • 问题内容: 我正在用来启动该应用程序。我不想知道应用程序的退出状态,而只想启动exe。 我需要将参数传递给该exe 请提出一种在Python中运行此方法的方法。 问题答案: 您应该使用的模块,而不是或在任何情况下,我所知道的。 您 可以 按照@Hackaholic在评论中的建议进行操作 但这并不简单,建议使用docs代替。

    • 我一直试图从一个对象数组填充一个JTable,但是什么也没有显示出来。下面是填充表的方法代码。system.out.println使我能够检查数据是否正确传递,变量中是否有值。这是来自界面的: 即使来自接口的数据显示在控制台中,也只显示表头。如果有人能解决如何正确地将数据值传递给JTable,那就太棒了!

    • 我正在使用一个应用程序,它的前端使用html、Javascript和jQuery,后端和数据库使用Java和Oracle。 目前,它将数据从前端传回java,并在后端附加一个URL参数,如http://localhost/28182391238912398172 然后,它使用一个ajaxget请求,使用URL中的id调用servlet,以运行一个准备好的语句,使用Java查询数据库。 我需要做的是

    • 我需要你的帮助,在这个特殊的问题上,我想传递一个隐藏输入类型的值。jsp程序到servlet程序 我现在做的基本上是这样的 从servlet中我得到了值 它没有打印任何想法。jsp表单方法是post,servlet方法是doPost 有什么想法为什么它不传递参数吗?

    • 我可以在p元素上看到扫描的值(id=“code”)。我如何用这个值填充文本框? 实际上,当我按下扫描条形码按钮时,相机打开并扫描一个EAN13条形码,值显示在P元素中(590123...是条形码)。可以在下面看到。但我想在TextBox中看到这个值。

    • 所以基本上我有我的rootFolderId在我的application.properties 我需要把它放到控制器里 并在@RequestParam中使用它,例如: 但是我遇到了“属性值必须是常数”的问题。有什么方法可以让它工作吗?