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

如何使用Mockito让类A所有实例调用methodB时都返回固定字符串?

实现方案

注意:该方案要求Mockito版本≥3.4.0,且必须引入mockito-inline依赖,默认的mockito-core不支持构造函数Mock能力

要实现所有A类实例调用methodB都返回固定值,用Mockito的mockConstruction方法即可,代码示例如下:

import org.mockito.MockedConstruction;
import static org.mockito.Mockito.*;

public class MockTest {
    public void testMockAllAInstance() {
        // 用try-with-resources包裹,保证作用域结束后自动恢复A类原有实例化逻辑
        try (MockedConstruction<A> mockedA = mockConstruction(A.class, (mock, context) -> {
            // 统一对所有新创建的A类Mock实例打桩
            when(mock.methodB()).thenReturn("fixedstring");
        })) {
            // 此处执行业务代码,所有该作用域内new出来的A实例均为Mock对象
            A a1 = new A();
            A a2 = new A();
            String b = a1.methodB();
            String c = a2.methodB();
            
            // 验证结果:b和c的值均为"fixedstring"
            assert "fixedstring".equals(b);
            assert "fixedstring".equals(c);
        }
        // 出了try作用域后,new A()会恢复原有类逻辑
    }
}

核心逻辑说明

  • mockConstruction会拦截指定类在作用域内的所有构造函数调用,返回预先配置好的Mock对象
  • 构造时传入的回调函数会在每个Mock实例生成时触发,我们在回调中统一给所有实例的methodB方法配置固定返回值,即可实现需求
  • 用try-with-resources包裹可以自动释放Mock配置,不会对其他测试逻辑产生污染

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 17:36:07