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

使用Mock Supplier时getSomeValue返回null而非预期值的问题求助

解决Supplier返回Mock实例时方法调用返回null的问题

业务代码

class TestClass {

private Supplier<SomeConfigClass> configSupplier;

testMethod() {
    int value = configSupplier.get().getSomeValue();
    // business logic using the value.
}
}

原测试代码

configSupplier = () -> mock(SomeConfigClass); // 已注入至TestClass

TestClass ob = new TestClass(configSupplier);

// 配置Mock
when(configSupplier.get().getSomeValue()).thenReturn(1);

// 调用方法
ob.testMethod();

// 验证调用
...

问题原因

当前的Supplier实现() -> mock(SomeConfigClass)会每次调用get()时生成一个全新的SomeConfigClass Mock实例。配置Mock时,你是对第一次调用get()得到的实例设置了getSomeValue()返回1,但testMethod()里调用get()时拿到的是另一个全新的Mock实例,这个实例没有任何预设,所以getSomeValue()返回null。

修正后的测试代码

先创建一个固定的Mock实例,让Supplier始终返回这个实例:

// 先创建单一的Mock实例
SomeConfigClass configMock = mock(SomeConfigClass);
// 让Supplier返回这个固定实例
configSupplier = () -> configMock;

TestClass ob = new TestClass(configSupplier);

// 直接对固定的Mock实例配置返回值
when(configMock.getSomeValue()).thenReturn(1);

// 调用方法
ob.testMethod();

// 验证调用
...

这样无论多少次调用configSupplier.get(),拿到的都是同一个Mock实例,预设的返回值自然会生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 17:45:34