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

Mockito:基于特定属性匹配器,按DatabaseRequest的operation返回不同响应

基于DatabaseRequest的operation字段返回不同响应的实现方案

你可以通过Mockito的参数匹配器来实现根据DatabaseRequest的operation字段返回不同响应的需求,以下是几种简洁的实现方式:

方式一:直接使用argThat结合Lambda表达式

这是最直观的写法,直接在匹配器里判断请求的operation值:

import static org.mockito.ArgumentMatchers.argThat;
import static org.mockito.Mockito.when;

// 匹配operation为DEMO的请求,返回对应响应
when(operationService.executeOperation(
    argThat(req -> "DEMO".equals(req.getOperation()))
)).thenReturn("DEMO_RESPONSE");

// 匹配operation为PILOT的请求,返回对应响应
when(operationService.executeOperation(
    argThat(req -> "PILOT".equals(req.getOperation()))
)).thenReturn("PILOT_RESPONSE");

如果需要兼容null请求的情况,可在Lambda里补充空判断:

argThat(req != null && "DEMO".equals(req.getOperation()))

方式二:使用Answer接口统一处理多场景

如果需要支持更多operation类型,用Answer可以把逻辑集中在一起,更便于维护:

import static org.mockito.Mockito.any;
import static org.mockito.Mockito.when;

when(operationService.executeOperation(any(DatabaseRequest.class)))
    .thenAnswer(invocation -> {
        // 获取传入的DatabaseRequest参数
        DatabaseRequest request = invocation.getArgument(0);
        // 根据operation字段返回对应结果
        return switch(request.getOperation()) {
            case "DEMO" -> "DEMO_RESPONSE";
            case "PILOT" -> "PILOT_RESPONSE";
            // 可添加更多operation分支
            default -> "DEFAULT_RESPONSE"; // 处理未定义的operation
        };
    });

注意事项

  • 确保DatabaseRequest类的getOperation()方法是可访问的(public或包级访问权限,保证测试类能调用)
  • 以上代码基于Mockito 2.x及以上版本,低版本可能需要自定义ArgumentMatcher类(不推荐,不如Lambda简洁)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 05:01:00