java - 在 Controller 测试中注入(inject)主体

标签 java spring mockito

我想在 Controller 测试中注入(inject)主体对象,但它始终为空。我已经将身份验证对象设置为 SecurityContextHolder

SecurityContextHolder.getContext().setAuthentication(authentication);

这是我之前的设置

@Autowired
    private WebApplicationContext wac;

 @Before
    public void abstractControllerSetUp() {
        securityUser = getPrincipal();
        authentication = logIn();
        mockMvc = webAppContextSetup(wac).build();
    }

但是当我调用

mockMvc.perform(put("/partner/notifications/activate")
                .content(toJson(command))
                .with(user(securityUser))
                .contentType(MediaType.APPLICATION_JSON))
                .andExpect(status().isOk());

principal 始终为 null,它在应用程序运行时起作用。

@PutMapping("/activate")
    public void activateNotification(@RequestBody NotificationCommand command, @AuthenticationPrincipal Principal principal) {

最佳答案

在 Spring 4.3.2 中,MockMvcRequestBuilders 有一个名为 principal() 的方法。使用它代替 with(user())

mockMvc.perform(put("/partner/notifications/activate")
            .content(toJson(command))
            .principal(securityUser)
            .contentType(MediaType.APPLICATION_JSON))
            .andExpect(status().isOk());

关于java - 在 Controller 测试中注入(inject)主体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48762000/

相关文章:

java - 为什么 JmsTemplate.receive 方法返回 null 对象?

java - asp.net 是否像 java 服务器平台一样容易受到对象序列化的影响

java - 如何模拟未作为参数传递的对象

java - 如何使用 EasyMock 模拟方法

java - 等待客户端读取消息的套接字服务器

java - 管理事务回滚

java - 为嵌套对象的单元测试用例生成测试数据

java - 使用 mockito 进行单元测试(部分模拟)

java - 在 JDK 8 中,Nashorn 和新的 JSON-P (javax.json) API 之间是否有计划的互操作性?

Java函数查找素数不起作用