java - 用 mockito 模拟一个静态方法

标签 java unit-testing mocking mockito

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

据我所知这是not possible ,我怎样才能解决这个问题? powermock 不是一种选择。

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

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

我读了一个答案 here但我不知道如何将这个答案写入代码。 有人可以提供解决方案吗?

最佳答案

正如您所指出的,无法使用 Mockito 模拟静态方法,并且由于您不想使用 Powermock 或其他工具,您可以在测试中尝试如下操作。

  1. 创建测试认证对象

    Authentication auth = new ...//根据您的需要和所需的属性创建实例,或者如果您不关心则只是模拟它

  2. 模拟安全上下文

    SecurityContext context = mock(SecurityContext.class);

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

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

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

    SecurityContextHolder.setContext(securityContext);

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

关于java - 用 mockito 模拟一个静态方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24655524/

相关文章:

android - Robolectric:从 Assets 创建时,字体对象都是相同的

ios - 如何对正确显示的 UIView 进行单元测试?

c++ - 哪些模拟框架与 cppunit 一起使用?

unit-testing - AngularJS - 单元测试文件上传

java - 在java中检查是否打开大写锁定的方法

java - 压缩文件的 MD5 散列

java - 无法解析 hibernate.cfg.xml

Java (Swing) - 如何旋转一堆线?

c# - 如何在内存中初始化测试并在每个测试中使用

.net - 如何模拟 IEnumerable<T> 以便我可以测试接收它的方法