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

如何配置Mockito返回除1之外的任意整数?

解决Mockito返回不等于1的任意整数的问题

嘿,我懂你想实现的效果——让Mockito返回一个不等于1的任意整数,但你当前尝试的thenReturn(anyInt() != 1)是走不通的。原因有两个:一是anyInt()是Mockito的参数匹配器,用来匹配方法参数的,不能直接用来生成返回值;二是anyInt() !=1得到的是布尔值,和你方法返回的double类型不匹配。

下面给你两种可行的解决方案:

方案一:动态生成符合条件的返回值(推荐)

用Mockito的thenAnswer()方法来动态生成返回值,它允许你自定义返回逻辑。因为你的getItemNumber方法返回的是double,所以最后要把整数转成double类型:

import java.util.concurrent.ThreadLocalRandom;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;

// Java 8+ 用Lambda写法
Mockito.when(dsIn.getItemNumber(1, "COLUMN")).thenAnswer(invocation -> {
    int randomInt;
    // 循环生成直到得到不等于1的整数
    do {
        randomInt = ThreadLocalRandom.current().nextInt();
    } while (randomInt == 1);
    return (double) randomInt;
});

如果是Java 8之前的版本,用匿名内部类实现Answer接口:

Mockito.when(dsIn.getItemNumber(1, "COLUMN")).thenAnswer(new Answer<Double>() {
    @Override
    public Double answer(InvocationOnMock invocation) throws Throwable {
        int randomInt;
        do {
            randomInt = ThreadLocalRandom.current().nextInt();
        } while (randomInt == 1);
        return (double) randomInt;
    }
});

方案二:固定返回非1的整数(简单场景)

如果不需要真的“任意”,只是需要几个非1的整数轮着返回,可以直接用thenReturn()传入多个值:

// 每次调用依次返回2.0、3.0、4.0,都是不等于1的数值
Mockito.when(dsIn.getItemNumber(1, "COLUMN")).thenReturn(2.0, 3.0, 4.0);

这样每次调用mock方法时,会按顺序返回你指定的非1数值,适合简单的测试场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:43:28