Java 控制器测试中的注入原理

Java 控制器测试中的注入原理,java,spring,mockito,Java,Spring,Mockito,我想在控制器测试中注入主体对象,但它总是空的。Im已将身份验证对象设置为SecurityContextHolder SecurityContextHolder.getContext().setAuthentication(authentication); 这是我以前的设置 @Autowired private WebApplicationContext wac; @Before public void abstractControllerSetUp() {

我想在控制器测试中注入主体对象,但它总是空的。Im已将身份验证对象设置为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());
主体始终为null,它在应用程序运行时工作

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

在Spring4.3.2中,
MockMvcRequestBuilders
有一个名为
principal()
的方法。用它来代替(user())

请尝试以下操作:

User user = new User(userName,userPassword, AuthorityUtils.createAuthorityList("YOUR_ROLES...."));
TestingAuthenticationToken testingAuthenticationToken = new TestingAuthenticationToken(user,null);
然后


你看过@WithMockUser(第11.2节)了吗?勾选这个:
User user = new User(userName,userPassword, AuthorityUtils.createAuthorityList("YOUR_ROLES...."));
TestingAuthenticationToken testingAuthenticationToken = new TestingAuthenticationToken(user,null);
mockMvc.perform(put("/partner/notifications/activate").principal(testingAuthenticationToken))