JAVA 8 junit 单元测试——静态方法单元测试 Mockito.mockStatic

静态方法的单元测试Mockito
直接上例子
方法

public ArrayList<SearchFields> convertToSearchFieldsList(HashMap<String, ArrayList<SearchFieldValue>> filter) {
        return ESUtils.convertToSearchFieldsList(filter);
    }

convertToSearchFieldsList方法就是静态方法,可看下:

在这里插入图片描述

单测

import org.junit.Assert;
import org.junit.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.MockedStatic;
import org.mockito.Mockito;

@Test
    public void testConvertToSearchFieldsList() {
        SearchFields searchFields = new SearchFields();
        searchFields.setOperation("2");
        ArrayList<SearchFields> combineRule = new ArrayList<>();
        combineRule.add(searchFields);
        HashMap<String, ArrayList<SearchFieldValue>> filter = new HashMap<>();
        ArrayList<SearchFieldValue> list = new ArrayList<>();
        SearchFieldValue searchFieldValue = new SearchFieldValue();
        searchFieldValue.setVal("er");
        list.add(searchFieldValue);
        filter.put("1",list);
        try(MockedStatic<ESUtils> theMock = Mockito.mockStatic(ESUtils.class)) {
            theMock.when(() -> ESUtils.convertToSearchFieldsList(Mockito.any())).thenReturn(combineRule);
        }
        Assertions.assertThat(ucompanyServiceImpl.convertToSearchFieldsList(filter));
    }

【加粗提示】

try(MockedStatic<ESUtils> theMock = Mockito.mockStatic(ESUtils.class)) {
            theMock.when(() -> ESUtils.convertToSearchFieldsList(Mockito.any())).thenReturn(combineRule);
        }
### Java 中使用 Mockito 进行单元测试 Mockito 是一种流行的用于 Java 的 Mocking 框架,它可以帮助开发者轻松地编写单元测试。以下是关于如何在 Java 中使用 Mockito 编写单元测试的一个完整示例。 #### 示例代码 下面展示了一个简的例子,演示如何通过 `mock` 方法创建模拟对象并验证其行为: ```java // 导入必要的静态方法和类 import static org.mockito.Mockito.*; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; class ExampleService { private final Dependency dependency; public ExampleService(Dependency dependency) { this.dependency = dependency; } public String fetchData(int id) { return dependency.getData(id); } } interface Dependency { String getData(int id); } public class ExampleServiceTest { @Test void testFetchData() { // 创建一个依赖项的 Mock 对象 Dependency mockDependency = mock(Dependency.class); // 配置 Mock 行为 when(mockDependency.getData(1)).thenReturn("Mocked Data"); // 初始化被服务 ExampleService service = new ExampleService(mockDependency); // 调用方法并断言返回值 String result = service.fetchData(1); assertEquals("Mocked Data", result); // 验证交互次数 verify(mockDependency, times(1)).getData(1); } } ``` 在这个示例中,我们定义了一个名为 `ExampleService` 的类以及它的依赖接口 `Dependency`。为了试 `fetchData()` 方法的功能,我们使用了 `mock()` 函数来创建 `Dependency` 接口的模拟实现,并配置了当调用 `getData(1)` 时应返回 `"Mocked Data"`[^2]。 接着,在实际试过程中,我们初始化了 `ExampleService` 并传入该模拟对象作为参数。随后执行了目标函数 `fetchData()` 并对其结果进行了断言操作。最后一步是利用 `verify()` 来确认我们的模拟对象确实按照预期的方式被调用了相应的方法[^3]。 --- #### 关键概念解释 - **Mock 对象**: 使用 `mock()` 方法可以生成指定类型的虚拟实例,这些实例不会具备真实逻辑而是由开发人员自行设定响应规则。 - **Stubbing (桩)**: 利用 `when(...).thenReturn(...)` 或其他类似的 API 定义特定条件下应该产生的输出数据[^1]。 - **Verification (验证)**: 借助于 `verify()` 可以检查某个方法是否按期望频率被执行过或者接收到了正确的输入参数列表[^2]。 --- ### 注意事项 确保项目已引入 Mockito 库的相关依赖项;如果采用 Maven 构建工具,则需添加如下片段至 pom.xml 文件之中: ```xml <dependency> <groupId>org.mockito</groupId> <artifactId>mockito-core</artifactId> <version>4.x.x</version> <!-- 替换为最新版本号 --> <scope>test</scope> </dependency> ``` 此外还需注意 JUnit 版本兼容性问题——上述案例基于 JUnit 5 设计而成,因此也需要同步加入对应支持库声明。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值