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

如何Mock返回自身入参的Bean?以StuffRepository为例

如何Mock返回自身入参的Repository Bean?

这其实是Mockito里非常常见的需求,针对你的StuffRepository的save方法,想要让它返回传入的第一个参数,有两种简洁的实现方式:

方式一:使用returnsFirstArg()(推荐,代码更简洁)

Mockito提供了returnsFirstArg()这个静态方法,可以直接让Mock方法返回第一个入参。你只需要这样写:

import static org.mockito.ArgumentMatchers.any;
import static org.mockito.BDDMockito.given;
import static org.mockito.Mockito.returnsFirstArg;

// ... 你的测试类代码

@MockBean private StuffRepository stuffRepository; 

public void test() { 
    given(stuffRepository.save(any(Stuff.class))).willReturn(returnsFirstArg());
}

这里的any(Stuff.class)用来匹配任意类型为Stuff的入参,returnsFirstArg()告诉Mockito直接返回这个传入的参数。

方式二:使用willAnswer()(更灵活,适合需要处理参数的场景)

如果之后你需要对入参做一些简单处理再返回,或者你的Mockito版本不支持returnsFirstArg()(这个方法在Mockito 2.1+就已提供),可以用willAnswer()结合lambda表达式:

import static org.mockito.ArgumentMatchers.any;
import static org.mockito.BDDMockito.given;

// ... 你的测试类代码

@MockBean private StuffRepository stuffRepository; 

public void test() { 
    given(stuffRepository.save(any(Stuff.class))).willAnswer(invocation -> {
        // 获取第一个入参(索引从0开始)
        Stuff inputStuff = invocation.getArgument(0);
        // 这里可以加一些参数处理逻辑,比如修改属性
        // inputStuff.setId(1L);
        return inputStuff;
    });
}

这种方式通过InvocationOnMock对象获取传入的参数,你可以在返回前做任何自定义操作,最后返回处理后的参数(或者直接返回原参数)。

两种方式都能实现你想要的效果:当调用stuffRepository.save(v)时,Mock对象会返回v本身。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:38:28