有没有办法让存根方法在后续调用中返回不同的对象?我想这样做是为了测试ExecutorCompletionService人的不确定性react .i、 e.测试结果是否保持不变,无论方法的返回顺序如何.

我要测试的代码如下所示.

// Create an completion service so we can group these tasks together
ExecutorCompletionService<T> completionService =
        new ExecutorCompletionService<T>(service);

// Add all these tasks to the completion service
for (Callable<T> t : ts)
    completionService.submit(request);

// As an when each call finished, add it to the response set.
for (int i = 0; i < calls.size(); i ++) {
    try {
        T t = completionService.take().get();
        // do some stuff that I want to test
    } catch (...) { }        
}

推荐答案

可以使用thenAnswer方法执行此操作(使用when链接时):

when(someMock.someMethod()).thenAnswer(new Answer() {
    private int count = 0;

    public Object answer(InvocationOnMock invocation) {
        if (count++ == 1)
            return 1;

        return 2;
    }
});

或者使用等效的静电doAnswer方法:

doAnswer(new Answer() {
    private int count = 0;

    public Object answer(InvocationOnMock invocation) {
        if (count++ == 1)
            return 1;

        return 2;
    }
}).when(someMock).someMethod();

Java相关问答推荐

如何在Java中对自定义协议进行主机名验证?

Java 22模式匹配不适用于记录模式匹配.给出汇编问题

Annotation @ Memphier无法正常工作,并表示:class需要一个bean,但找到了2个bean:

转换为Biggram

Jooq外键关系

如何配置ActiveMQ Artemis以使用AMQP 1.0和其他协议与Java

Kubernetes的Java客户端检索状态.处于终止状态的Pod的阶段';正在运行';

确定Java中Math.Ranb()输出的上限

Hibernate 6支持Joda DateTime吗?

如何获取Instant#of EpochSecond(?)的最大值

无法在Java中处理PayPal支付响应

Java Mooc.fi Part 12_01.Hideout -返回和删除方法

Domino Designer 14中的保存代理添加了重影库

虚拟线程应该很快消亡吗?

如何在JavaFX循环中完美地制作一个AudioClip/MediaPlayer?

错误:不兼容的类型:Double不能转换为Float

Spring Framework6.1中引入的新RestClient是否有适合于测试的变体,就像RestTemplate和TestRestTemplate一样?

如何在Java中使用正则表达式拆分字符串

使用MediaPlayer类在一段时间后停止播放音乐

如何使JOOQ渐变脚本不重新创建表未更改的类?