Spring Security,JUnit:@WithUserDetails@Before中创建的用户

2022-09-01 21:03:06

在使用Spring MockMVC进行JUnit测试中,有两种方法可以作为Spring Security用户进行身份验证:使用提供的凭据创建一个虚拟用户,获取用户名并使用自定义(the )将其解析为正确的自定义实现。@WithMockUser@WithUserDetailsUserDetailsUserDetailsServiceUserDetailsServiceImpl

在我的情况下,从数据库加载用户。我想使用的用户入到测试套件的方法中。UserDetailsService@Before

但是,我找不到用户。UserDetailsServiceImpl

在我的,我插入用户,如下所示:@Before

User u = new User();
u.setEMail("test@test.de");
u = userRepository.save(u);

在 :UserDetailsServiceImpl

public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
    User user = this.userRepository.findOneByEMail(username);

    if (user == null)
        throw new UsernameNotFoundException(String.format("No user found with username '%s'.", username));
    return user;
}

如何使用 在 中创建的帐户?@Before@WithUserDetails


答案 1

不幸的是,你不能轻易地做,因为Spring注释会在运行方法之前调用Spring安全上下文测试监听器。@WithUserDetails@Before@WithUserDetailssetUp@Before

这是 https://stackoverflow.com/a/38282258/1814524 一个小技巧,并回答你的问题。


答案 2

您可以使用 代替 。这为我带来了好处。任何人都可以证实这一点吗?@PostConstruct@Before


推荐