Mockito中的Java枚举列表thenReturn

2024-01-21

有没有办法在mockito的thenReturn函数中枚举列表中的项目,以便我返回列表中的每个项目。到目前为止我已经这样做了:

List<Foo> returns = new ArrayList<Foo>();
//populate returns list

Mockito.when( /* some function is called */ ).thenReturn(returns.get(0), returns.get(1), returns.get(2), returns.get(3));

这正是我想要的。每次调用该函数时,它都会从列表中返回一个不同的对象,例如get(1), get(2) etc.

但我想简化这个并使其对任何大小的列表都更加动态,以防我有一个大小为 100 的列表。我尝试了这样的操作:

Mockito.when( /* some function is called */ ).thenReturn(
    for(Foo foo : returns) {
        return foo;
    }
);

我也尝试过这个:

Mockito.when(service.findFinancialInstrumentById(eq(1L))).thenReturn(
    for (int i=0; i<returns.size(); i++) {
        returns.get(i);
    }
);

但这不起作用......那么我如何在thenReturn....我遇到了其他喜欢的方法then or answer但我不确定在这种情况下哪一个最有效。


thenReturn() 方法签名是

thenReturn(T value, T... values)

所以它需要一个 T 的实例,后跟一个可变参数 T...,它是数组的语法糖。所以你可以使用

when(foo.bar()).thenReturn(list.get(0), 
                           list.subList(1, list.size()).toArray(new Foo[]{}));

但更简洁的解决方案是创建一个 Answer 实现,它将 List 作为参数,并在每次使用时回答列表的下一个元素。然后使用

when(foo.bar()).thenAnswer(new SequenceAnswer<>(list));

例如:

private static class SequenceAnswer<T> implements Answer<T> {

    private Iterator<T> resultIterator;

    // the last element is always returned once the iterator is exhausted, as with thenReturn()
    private T last;

    public SequenceAnswer(List<T> results) {
        this.resultIterator = results.iterator();
        this.last = results.get(results.size() - 1);
    }

    @Override
    public T answer(InvocationOnMock invocation) throws Throwable {
        if (resultIterator.hasNext()) {
            return resultIterator.next();
        }
        return last;
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Mockito中的Java枚举列表thenReturn 的相关文章

  • 如何创建一个显示 Spinners 的 x 和 y 值的表格?

    我想创建一个位于图表右侧的表格 其中显示 2 列 x 和 y 值已输入到xSpin and ySpin旋转器 我已经画了一张我想要桌子放置的位置的图 我尝试过在网格窗格布局中使用文本框来创建表格并将值直接输入到文本框网格中 但是我无法将它们
  • 这个函数(for循环)空间复杂度是O(1)还是O(n)?

    public void check 10 for string i list Integer a hashtable get i if a gt 10 hashtable remove i 这是 O 1 还是 O n 我猜测 O n 但不是
  • SAML 服务提供商 Spring Security

    当使用预先配置的服务提供者元数据时 在 Spring Security 中 是否应该有 2 个用于扩展元数据委托的 bean 定义 一份用于 IDP 元数据 一份用于 SP 元数据
  • 正则表达式拆分数字和字母组,不带空格

    如果我有一个像 11E12C108N 这样的字符串 它是字母组和数字组的串联 如何在中间没有分隔符空格字符的情况下分割它们 例如 我希望分割结果为 tokens 0 11 tokens 1 E tokens 2 12 tokens 3 C
  • JAVA - Xuggler - 组合 MP3 音频文件和 MP4 电影时播放视频

    使用 JAVA 和 Xuggler 以下代码组合 MP3 音频文件和 MP4 电影文件并输出组合的 mp4 文件 我希望在合并音频和视频文件时应自动播放输出视频文件 String inputVideoFilePath in mp4 Stri
  • 当从服务类中调用时,Spring @Transactional 不适用于带注释的方法

    在下面的代码中 当方法内部 是从内部调用的方法外部 应该在交易范围内 但事实并非如此 但当方法内部 直接从调用我的控制器class 它受到事务的约束 有什么解释吗 这是控制器类 Controller public class MyContr
  • 使用 AES SecretKey 的 Java KeyStore setEntry()

    我目前正在 Java 中开发一个密钥处理类 特别是使用 KeyStore 我正在尝试使用 AES 实例生成 SecretKey 然后使用 setEntry 方法将其放入 KeyStore 中 我已经包含了代码的相关部分 The KS Obj
  • Java 文件上传速度非常慢

    我构建了一个小型服务 它从 Android 设备接收图像并将其保存到 Amazon S3 存储桶中 代码非常简单 但是速度非常慢 事情是这样的 public synchronized static Response postCommentP
  • 如何模拟从抽象类继承的受保护子类方法?

    如何使用 Mockito 或 PowerMock 模拟由子类实现但从抽象超类继承的受保护方法 换句话说 我想在模拟 doSomethingElse 的同时测试 doSomething 方法 抽象超类 public abstract clas
  • Hazelcast 分布式锁与 iMap

    我们目前使用 Hazelcast 3 1 5 我有一个简单的分布式锁定机制 应该可以跨多个 JVM 节点提供线程安全性 代码非常简单 private static HazelcastInstance hInst getHazelcastIn
  • hibernate锁等待超时超时;

    我正在使用 Hibernate 尝试模拟对数据库中同一行的 2 个并发更新 编辑 我将 em1 getTransaction commit 移至 em1 flush 之后我没有收到任何 StaleObjectException 两个事务已成
  • 将 SignedHash 插入 PDF 中以进行外部签名过程 -workingSample

    遵循电子书第 4 3 3 节 PDF 文档的数字签名 https jira nuxeo com secure attachment 49931 digitalsignatures20130304 pdf 我正在尝试创建一个工作示例 其中 客
  • 枚举扩展方法

    在vs2008中 是否可以编写适用于任何枚举的扩展方法 我知道您可以针对特定枚举编写扩展方法 但我希望能够使用单个扩展方法对每个枚举进行处理 这可能吗 是的 只需针对基础进行编码Enum类型 例如 public static void So
  • 以编程方式在java的resources/source文件夹中创建文件?

    我有两个资源文件夹 src 这是我的 java 文件 资源 这是我的资源文件 图像 properties 组织在文件夹 包 中 有没有办法以编程方式在该资源文件夹中添加另一个 properties 文件 我尝试过这样的事情 public s
  • 在游戏视图下添加 admob

    我一直试图将 admob 放在我的游戏视图下 这是我的代码 public class HoodStarGame extends AndroidApplication Override public void onCreate Bundle
  • 编辑文件名在 JComboBox 中的显示方式,同时保持对文件的访问

    我对 Java 很陌生 对堆栈溢出也很陌生 我正在尝试利用 JMF API 创建一个用 Java 编码的简单媒体播放器 到目前为止 我已经能够设置一个简单的队列 播放列表来使用JComboBox called playListHolder
  • 我可以创建自定义 java.* 包吗?

    我可以创建一个与预定义包同名的自己的包吗在Java中 比如java lang 如果是这样 结果会怎样 这难道不能让我访问该包的受保护的成员 如果不是 是什么阻止我这样做 No java lang被禁止 安全管理器不允许 自定义 类java
  • javafx android 中的文本字段和组合框问题

    我在简单的 javafx android 应用程序中遇到问题 问题是我使用 gradle javafxmobile plugin 在 netbeans ide 中构建了非常简单的应用程序 其中包含一些文本字段和组合框 我在 android
  • ServletContainer 类未找到异常

    我无法再编译我的球衣项目 并且出现以下异常 GRAVE Servlet Project API threw load exception java lang ClassNotFoundException com sun jersey spi
  • 调整添加的绘制组件的大小和奇怪的摆动行为

    这个问题困扰了我好几天 我正在制作一个特殊的绘画程序 我制作了一个 JPanel 并添加了使用 Paint 方法绘制的自定义 jComponent 问题是 每当我调整窗口大小时 所有添加的组件都会 消失 或者只是不绘制 因此我最终会得到一个

随机推荐

  • kubectl 无法从私有存储库中提取镜像

    我正在运行 kubeadm alpha 版本来设置我的 kubernates 集群 我正在尝试从 kubernates 提取托管在 nexus 存储库中的 docker 镜像 当我尝试创建一个 Pod 时 它每次都会给出 ImagePull
  • 低延迟模式与 Linux 串行端口一起使用是否安全?

    在 Linux 串行端口上使用 low latency tty 模式是否安全 这tty flip buffer push https github com torvalds linux blob master drivers tty tty
  • 在 Windows Phone 8.1 中使用加速度计传感器数据在画布上绘制线条

    我正在根据设备移动在画布上绘图 我想根据移动移动在画布上绘制不同的字符 目前它正在工作 但我想找到时间差 并且我想检测暂停 暂停意味着用户没有尝试绘制并且用户没有移动手机 因此应用程序可以假设现在用户想要绘制下一个字符 如何找到加速度计值的
  • 打散列

    哈希上的 splat 将其转换为数组 foo bar gt foo bar 这里是否存在一些隐藏机制 例如隐式类转换 或者它是内置的原始功能 除了数组之外 还有nil并哈希唯一在 Ruby 1 9 下使用 splat 运算符消失 改变的东西
  • 在 C 中等待/暂停一定秒数

    我编写了一个小控制台应用程序 我希望它在循环 一段时间 再次开始之前暂停一定的秒数 我正在使用 Windows 操作系统 在 Windows 上 执行此操作的函数是Sleep 这需要量毫秒你想睡觉 使用Sleep 你需要包括windows
  • SQL Server 函数获取层次结构中的顶级父级

    我有下表 master group 结构 code name under 1 National Sales Manager 1 2 regional sales manager 1 3 area sales manager 2 4 sale
  • 使用 Python requests 模块发出 SOAP 请求

    我使用 python requests 模块来处理 REST 请求 我正在尝试提出肥皂请求 但我想知道无法获得这方面的示例 这是我的肥皂体和标题
  • IEqualityComparer 和 IEquatable 之间有什么区别?

    我想了解场景IEqualityComparer
  • 输出不正确。 C++ 入门 1.4.4

    下面的程序应该计算用户输入整数的次数 示例 用户输入 42 42 10 10 程序应该输出 42 出现 2 次 10 出现 2 次 问题 代码不会输出数字 10 的最后结果 直到您输入另一个数字 我已经粘贴了下面的代码 这段代码来自c 底漆
  • 如何在 Android 应用程序中从 WordPress 博客检索帖子?

    我正在尝试开发一个 Android 应用程序来浏览我拥有的由 Wordpress 驱动的博客 我正在尝试弄清楚如何从博客中检索帖子和其他信息以在应用程序中显示 我已经看遍了一切 但我感觉完全迷失了 这是完全可以用 Java XML 完成的事
  • 如何捕获 urllib.urlretrieve 中的 404 错误

    背景 我正在使用urllib urlretrieve http docs activestate com activepython 2 6 python library urllib html 与任何其他函数相反urllib 模块 因为钩子
  • 在文件的某个位置(行和列)启动 Vim

    要从特定行开始 我将使用 vim FILE LINE 但是需要向 vim 传递什么参数才能将光标定位到该行的某一列呢 一种方法是 vim call cursor
  • Subgit:避免将 git 分支同步到 svn

    我正在尝试使用SubGit http subgit com 但我面临着分支的问题 我希望在 Git 下创建的分支仅在 Git 中生存和消亡 我找到了这个 SubGit 如何排除分支 https stackoverflow com quest
  • 如何从 Hibernate Validator 检索默认验证消息?

    我正在尝试使用检索默认验证错误消息MessageSource 我正在使用的代码使用反射来检索message范围 在不覆盖的约束上message参数 我想检索默认的错误消息 当我调用message验证注释的方法 我得到 org hiberna
  • MS CryptoAPI 无法在 Windows XP 上使用 CryptAcquireContext() 运行

    我使用 Microsoft CryptoAPI 编写了一些代码来计算 SHA 1 并让编译后的 exe 在 Windows 7 Win Server 2008 Win Server 2003 上运行 但是 当我在 Windows XP SP
  • bootstrap-table如何使用搜索和过滤?

    我正在使用 bootstrap 绘制表格 并且需要搜索和过滤功能 但是添加过滤功能后 搜索功能就无法使用了 当我删除 行时 搜索功能起作用 但过滤功能消失 如何使用这两个功能 这是代码 div div table thead tr th I
  • 返回字符串中第 N 个字符之后的字符

    我需要帮助 有人可以让我知道如何返回第 n 个字符之后的字符吗 例如 我的字符串是 001棒球 和 002高尔夫 我希望我的代码返回棒球和高尔夫 而不是数字部分 由于数字后面的单词并不总是相同的长度 我不能使用 Right String n
  • Post 返回 405 方法不允许

    我的 Rails localhost 服务器出现问题 所有 Post 调用开始返回 405 method not allowed 但是我们的临时服务器和生产服务器上没有问题 它发生在所有代码分支上 甚至是那些尚未更新的分支上 调试时 我看到
  • 在执行 ShellExecute 之前等待?

    我有一个希望很快的问题 是否可以稍微延迟 ShellExecute 的执行 我有一个带有自动更新程序的应用程序 下载所有必需的文件等后 它将当前文件重命名为 OLD 并将新文件重命名为以前的文件 够简单的 但随后我需要删除那些 OLD 文件
  • Mockito中的Java枚举列表thenReturn

    有没有办法在mockito的thenReturn函数中枚举列表中的项目 以便我返回列表中的每个项目 到目前为止我已经这样做了 List