java - Spring MVC 测试 : Controller Method Parameters

标签 java spring spring-mvc spring-test-mvc

我正在尝试为我的 Spring MVC Web 应用程序编写测试。

我已经成功配置了一个 MockMvc 对象并且可以执行 preform() 操作,并且可以验证我的 Controller 方法是否被调用。

我遇到的问题与将 UserDetails 对象传递给我的 Controller 方法有关。

我的 Controller 方法签名如下:

@RequestMapping(method = RequestMethod.GET)
public ModelAndView ticketsLanding(
        @AuthenticationPrincipal CustomUserDetails user) {
    ...
}

在测试期间,user 为 null(由于我的代码导致 NullPointerException

这是我的测试方法:

import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.user;

@Test
public void ticketsLanding() throws Exception {
    // testUser is populated in the @Before method
    this.mockMvc.perform(
            get("/tickets").with(user(testUser))).andExpect(
            model().attributeExists("tickets"));
}

所以我的问题是如何正确地将 UserDetails 对象传递到我的 MockMvc Controller 中?其他与安全无关的对象(例如表单 dto)呢?

感谢您的帮助。

最佳答案

您需要像这样在单元测试中初始化安全上下文:

@Before
public void setup() {
    mvc = MockMvcBuilders
            .webAppContextSetup(context)
            .apply(springSecurity()) 
            .build();
}

关于java - Spring MVC 测试 : Controller Method Parameters,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32199281/

相关文章:

java - Spring Thymeleaf 如何将复选框的值绑定(bind)到集合字段

java - Spring MVC - 配置Ehcache - 不缓存

java - VisualVM:CPU/内存分析器卡在 "Connecting to the target JVM..."

java - Renjin - 找不到函数 'png'

spring - Java EE FrontController 与 Spring 的 DispatcherServlet

java - 如何让Spring访问下拉框值

mysql - JdbcTemplate 'IN' 搜索无法正常工作

java - 在 Java 8 中使用 TemporalAmount 或 TemporalUnit 有什么区别?

java - 为什么这些 throw 语句没有给我一个编译器错误?

java - 如何使用具有不同参数的 CrudRepository?