You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何模拟同一工具类中被静态方法调用的另一个静态方法?求示例

实现示例:Mock工具类中被调用的静态方法,保留目标方法真实逻辑

没问题,我来给你举个具体的实现例子,用Mockito就能轻松搞定这个需求!先假设你的工具类结构大概是这样的:

示例工具类代码

public class StringUtils {
    // 你不想Mock的目标方法,要执行真实逻辑
    public static String processInput(String input) {
        // 你想要Mock的被调用方法
        String cleanedContent = cleanInput(input);
        return "最终处理结果:" + cleanedContent;
    }

    // 需要Mock的静态方法
    public static String cleanInput(String input) {
        // 真实业务逻辑:比如去除空格、特殊字符
        return input.trim().replaceAll("[^\\w]", "");
    }
}

测试类实现(用JUnit 5 + Mockito 3.4.0+)

import org.junit.jupiter.api.Test;
import org.mockito.MockedStatic;
import static org.mockito.Mockito.*;
import static org.junit.jupiter.api.Assertions.*;

public class StringUtilsTest {

    @Test
    void testProcessInputWithMockedCleanInput() {
        // 测试用的输入和预设的Mock返回值
        String testInput = "  测试@内容#$  ";
        String mockedCleanResult = "测试内容";

        // 用MockedStatic静态Mock工具类,只指定要Mock的方法行为
        try (MockedStatic<StringUtils> mockedUtils = mockStatic(StringUtils.class)) {
            // 设置:当调用cleanInput(testInput)时,返回我们预设的结果
            mockedUtils.when(() -> StringUtils.cleanInput(testInput))
                      .thenReturn(mockedCleanResult);

            // 调用目标方法processInput——这个方法会执行真实逻辑,但内部调用的cleanInput是Mock的
            String finalResult = StringUtils.processInput(testInput);

            // 验证结果是否符合预期
            assertEquals("最终处理结果:测试内容", finalResult);

            // 验证cleanInput确实被调用了一次
            mockedUtils.verify(() -> StringUtils.cleanInput(testInput), times(1));
        }
    }
}

关键要点说明

  • 用MockedStatic来实现静态方法的Mock,这是Mockito 3.4.0及以上版本提供的特性,不需要额外依赖PowerMock
  • 通过when(...).thenReturn(...)仅对cleanInput方法设置Mock行为,processInput因为没有被Mock,会执行真实的代码逻辑
  • 用try-with-resources语法包裹MockedStatic,能确保测试结束后自动关闭Mock,避免影响其他测试用例

内容的提问来源于stack exchange,提问作者user447607

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:25:35