MockedStatic 用于模拟静态方法

本文涉及的产品
可观测可视化 Grafana 版,10个用户账号 1个月
应用实时监控服务-用户体验监控,每月100OCU免费额度
可观测监控 Prometheus 版,每月50GB免费额度
简介: `MockedStatic` 是 Mockito 3.4.0 版本引入的一个功能,用于模拟静态方法。在之前的 Mockito 版本中,模拟静态方法是一项困难的任务,通常需要借助其他工具如 PowerMockito。但是,从 Mockito 3.4.0 开始,你可以使用 `MockedStatic` 类轻松地模拟静态方法。以下是如何使用 `MockedStatic` 模拟静态方法的示例:1. 首先,确保你已经添加了 Mockito 的依赖项。对于 Maven 项目,添加以下依赖项:```xml<dependency> <groupId>org.mockito</groupId

MockedStatic 是 Mockito 3.4.0 版本引入的一个功能,用于模拟静态方法。在之前的 Mockito 版本中,模拟静态方法是一项困难的任务,通常需要借助其他工具如 PowerMockito。但是,从 Mockito 3.4.0 开始,你可以使用 MockedStatic 类轻松地模拟静态方法。

以下是如何使用 MockedStatic 模拟静态方法的示例:

  1. 首先,确保你已经添加了 Mockito 的依赖项。对于 Maven 项目,添加以下依赖项:
<dependency>
   <groupId>org.mockito</groupId>
   <artifactId>mockito-core</artifactId>
   <version>3.4.0</version>
   <scope>test</scope>
</dependency>
  1. 然后,编写一个简单的类,包含一个静态方法:
public class MyClass {
   
    public static String myStaticMethod() {
   
        return "Original result";
    }
}
  1. 接下来,编写一个测试类,使用 MockedStatic 模拟 myStaticMethod 方法:
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;

import static org.junit.jupiter.api.Assertions.assertEquals;

public class MyClassTest {
   
    @Test
    public void testMyStaticMethod() {
   
        try (MockedStatic<MyClass> myClassMock = Mockito.mockStatic(MyClass.class)) {
   
            myClassMock.when(() -> MyClass.myStaticMethod()).thenReturn("Mocked result");

            String result = MyClass.myStaticMethod();
            assertEquals("Mocked result", result);

            myClassMock.verify(() -> MyClass.myStaticMethod());
        }
    }
}

在这个示例中,我们使用 try (MockedStatic<MyClass> myClassMock = Mockito.mockStatic(MyClass.class)) 创建了一个 MockedStatic 实例。然后,我们使用 when() 方法定义了静态方法的模拟行为,并使用 thenReturn() 方法指定返回值。接下来,我们调用静态方法并验证其返回值。最后,我们使用 verify() 方法验证静态方法是否被调用。

请注意,MockedStatic 使用了 try-with-resources 语句,这意味着在测试方法结束时,模拟将自动关闭。

相关文章
|
7月前
静态方法 普通方法 和 构造方法三者的区别
静态方法 普通方法 和 构造方法三者的区别
112 0
|
7月前
|
Java
Java的在类内部调用本类方法
Java的在类内部调用本类方法
454 0
|
7月前
调用反射类的方法
调用反射类的方法
|
7月前
调用反射类的指定方法
调用反射类的指定方法
|
7月前
深入类的方法
深入类的方法
|
C++
同样一句代码,在类内调用,跟类外调用结果不同?
同样一句代码,在类内调用,跟类外调用结果不同?
80 0
|
Java
编写Java程序,在子类老虎中重写父类动物的吃食方法
编写Java程序,在子类老虎中重写父类动物的吃食方法
402 0
|
Java
Java抽象类及子类实例化顺序和方法调用顺序测试
Java抽象类及子类实例化顺序和方法调用顺序测试
315 0
|
Python
类的方法总结
[root@blackfox zhouyuyao]# cat c8.py  #!/usr/bin/python #coding:utf8 class MyClass(object):     name = 'Test'     def __init__(self):         self.
714 0
接口,实现类,对象方法的调用关系.(查看程序输出)
分析的术语可能不是那么准确!有待加强~~~ 划线法真的不错.不过其实这个程序仔细看看也能很好分析. 只不过脑子容量还是有限的~好脑子不如画个图~将编程看作是一门艺术,而不单单是个技术。 敲打的英文字符是我的黑白琴键, 思维图纸画出的是我编写的五线谱。
1038 0