java - 模拟 Spring 安全类

标签 java mockito

我尝试在 UserServiceImpl 类中为我的方法创建测试:

@Override
    public User getActualUser() throws WebSecurityException {
        Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
        if (!(authentication instanceof AnonymousAuthenticationToken)) {
            return userRepository.findByLogin(authentication.getName());
        }
        throw new WebSecurityException("Authenticated user not found");
    }

但即使我的身份验证是 AnonymousAuthenticationToken 的实例,我也总是得到 NullPointerException,测试总是转到 return userRepository.findByLogin(authentication.getName()); 行。

这是我的测试类:

@RunWith(MockitoJUnitRunner.class)
public class UserServiceImplTest {

    @InjectMocks
    UserServiceImpl userService;

    @Mock
    UserRepository userRepository;

@Test(expected = WebSecurityException.class)
    public void testGetActualUserWhenAuthenticationIsInstanceOfAnonymousAuthenticationToken() {

        //SETUP
        SecurityContext securityContext = mock(SecurityContext.class);
        Authentication authentication = mock(AnonymousAuthenticationToken.class);
        when(securityContext.getAuthentication()).thenReturn(authentication);

        //CALL
        userService.getActualUser();
    }

    @Test
    public void testGetActualUserWhenAuthenticationIsNotInstanceOfAnonymousAuthenticationToken() {

        //SETUP
        User user = new User();
        Authentication authentication = mock(Authentication.class);
        when(userRepository.findByLogin(anyString())).thenReturn(user);
        when(authentication.getName()).thenReturn("user");

        //CALL
        userService.getActualUser();

        //TODO VERIFY
    }

}

你能为这个方法创建适当的测试吗?

最佳答案

你忘记了:

SecurityContextHolder.setContext(/*mock*/securityContext);

...在您的测试设置中,这将修复主要的 NullPointerException!

关于java - 模拟 Spring 安全类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54659999/

相关文章:

java - mockito.when 返回 null 值

java - 锁定缓存键而不锁定整个缓存

java - AVD 无法正常工作。它出现了但无法解决

java - 无法将消息写入控制台中的 Excel 文件,显示 java.lang.NullPointerException

java - 当调用新的 Asynctask 时定义 onPostExecute

java - Mockito 注入(inject)嵌套 bean

java - validateJarFile(servlet-api.jar) - jar 未使用 eclipse 加载到 tomcat 中

unit-testing - 在mockito中验证的想法是什么以及我什么时候应该使用它

java - 如何在 MockMvc 中指定@RequestMapping 参数

exception - 在 Mockito 和 Groovy 2.0.4 中设置期望时出现 InvalidUseOfMatchersException