MockedStatic 用于模拟静态方法

简介: `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 语句,这意味着在测试方法结束时,模拟将自动关闭。

相关文章
|
测试技术
IDEA创建单元测试与测试覆盖率统计
IDEA(IntelliJ IDEA)不仅支持快速基于当前类创建单元测试,还支持代码测试覆盖率的统计,以及生成报告和标记测试运行命中的代码。
4210 0
IDEA创建单元测试与测试覆盖率统计
|
分布式计算 监控 搜索推荐
Elasticsearch之SearchScroll原理剖析和优化
Elasticsearch是一款优秀的开源企业级搜索引擎,其查询接口主要为Search接口,提供了丰富的各类查询、排序、统计聚合等功能。本文将要介绍的是另一个查询接口SearchScroll,同时介绍一下我们在这方面做的一些性能和稳定性等方面的优化工作。   Elasticsearch的SearchScroll接口可用于从索引中检索大量数据,或者是所有的数据,值得注意的是Elasti
5683 0
Elasticsearch之SearchScroll原理剖析和优化
Mockito框架抛出NullPointerException
一文详细讲解Mockito框架是怎么抛出NullPointerException的整个过程和解决方式。
6969 0
|
10月前
|
人工智能 Java 测试技术
SpringBoot 测试实践:单元测试与集成测试
在 Spring Boot 测试中,@MockBean 用于创建完全模拟的 Bean,替代真实对象行为;而 @SpyBean 则用于部分模拟,保留未指定方法的真实实现。两者结合 Mockito 可灵活控制依赖行为,提升测试覆盖率。合理使用 @ContextConfiguration 和避免滥用 @SpringBootTest 可优化测试上下文加载速度,提高测试效率。
509 5
|
测试技术 开发者
单元测试问题之在Mockito中静态方法的调用,如何模拟
单元测试问题之在Mockito中静态方法的调用,如何模拟
|
人工智能 Java 测试技术
JDK11下Mock框架进化:从PowerMockito到Mockito Only
本文探讨了从使用PowerMock的测试环境迁移到仅使用Mockito(Mockito Only)策略的必要性和实践方法。
806 10
|
Java 测试技术 Maven
Java一分钟之-PowerMock:静态方法与私有方法测试
通过本文的详细介绍,您可以使用PowerMock轻松地测试Java代码中的静态方法和私有方法。PowerMock通过扩展Mockito,提供了强大的功能,帮助开发者在复杂的测试场景中保持高效和准确的单元测试。希望本文对您的Java单元测试有所帮助。
2345 2
|
测试技术
详解单元测试问题之@InjectMocks注入mock对象如何解决
详解单元测试问题之@InjectMocks注入mock对象如何解决
1312 1
|
IDE Java 测试技术
单元测试问题之Mockito 3.4mock静态方法如何解决
单元测试问题之Mockito 3.4mock静态方法如何解决
1127 1
|
测试技术
sonar代码扫描 覆盖率为0 单元测试不显示
sonar代码扫描 覆盖率为0 单元测试不显示
sonar代码扫描 覆盖率为0 单元测试不显示