用mockito模拟静态方法

时间:2014-07-09 13:50:43

标签: java unit-testing mocking mockito

我想在Mockito中模拟静态方法。

据我所知这是not possible,我该如何解决这个问题呢? powermock不是一个选择。

我希望我的身份验证变量不会为空。

Authentication authentication = SecurityContextHolder.getContext().getAuthentication();

我读了一个答案here,但我不知道如何将这个答案放到代码中。 有人可以给出解决方案吗?

1 个答案:

答案 0 :(得分:1)

正如您所指出的,使用Mockito模拟静态方法是不可能的,因为您不想使用Powermock或其他工具,您可以在测试中尝试以下内容。

  1. 创建测试认证对象

    Authentication auth = new ... // create instance based on your needs and with required attributes or just mock it if you do not care

  2. 模拟安全上下文

    SecurityContext context = mock(SecurityContext.class);

  3. 确保您的模拟返回相应的身份验证

    when(context.getAuthentication()).thenReturn(auth);

  4. 将安全上下文设置为holder

    SecurityContextHolder.setContext(securityContext);

  5. 现在每次调用SecurityContextHolder.getContext().getAuthentication()都应该返回在步骤1中创建的身份验证对象。