如何让 Mockito 模拟另一个文件中的常量?

2023-12-22

编辑:我正在测试的方法调用在另一个类中定义的这个常量,所以我想测试该方法是否独立于其他类定义常量的方式工作。嘲笑它是我能想到的第一件事,但我对如何以干净、安全的方式测试它的其他想法持开放态度

(类、方法和变量名称已泛化)

我正在尝试弄清楚如何编写测试。 我的一个方法从另一个类获取常量,如下所示:

OtherClass.CONSTANT

这个常数定义为:

public static final List<Long> CONSTANT =
  ImmutableList.of(1, 2);

在这个方法的测试中,我想模拟这个调用。我试过了

when(OtherClass.CONSTANT).thenReturn(ImmutableList.of(1, 2));

但这给了我这个错误:

RegularImmutableList cannot be returned by otherFunction()
otherFunction() should return String

otherFunction() 是代码库中的其他函数,它似乎与我一直在做的任何事情无关。

我也尝试过

doReturn(ImmutableList.of(1, 2)).when(OtherClass.CONSTANT);

但是,正如您可能猜到的那样,它给了我这个错误:

Argument passed to when() is not a mock!
Example of correct stubbing:
doThrow(new RuntimeException()).when(mock).someMethod();

我非常不知道应该如何嘲笑这个常量。


正如您所发现的,您无法模拟常量的值。

最简单的方法可能是将您的设计转换为使用接口来提供值,而不是直接使用该值。

就像是:

interface ConstantSupplier {
    List<Long> get();
}

public MyClass(ConstantSupplier supplier) {
    this.supplier = supplier;
}

然后您将对常量的引用替换为supplier.get().

现在很容易模拟:

ConstantSupplier supplier = mock(ConstantSupplier.class);
when(supplier.get()).thenReturn(List.of(4L, 9L));

您的非模拟代码可以使用 lambda 来提供实际值:

obj = new MyClass(() -> OtherClass.CONSTANT);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何让 Mockito 模拟另一个文件中的常量? 的相关文章

  • 春天。使用java配置解决循环依赖而不使用@Autowired

    我有循环依赖和java配置 虽然使用 xml 配置解决它非常简单 但如果没有 Autowired 我无法使用 java 配置解决它 豆子 public class A private B b public B getB return b p
  • 我可以为 Spring Boot 应用程序创建多个入口点吗?

    In 春季启动 需要指定一个主类 它是应用程序的入口点 通常 这是一个具有标准 main 方法的简单类 如下所示 SpringBootApplication public class MySpringApplication public s
  • 在 Windows 7 中,不从命令行强制终止 JVM

    我在 JVM 中运行了 Cobertura 仪器化 jar 当我在运行应用程序的 Windows 控制台中按 Ctrl C 时 JVM 结束并Cobertura 结果已成功刷新到 cobertura ser 文件 但我需要使用命令 工具 不
  • 在 Java 中使用 Apache POI XWPF 在同一个 Word 文档中横向和纵向页面

    我正在尝试使用 Java 和 Apache POI 库创建一个包含一些横向页面和一些纵向页面的 Word 文档 我可以更改所有页面的方向 但有没有办法只更改其中某些页面的方向 我尝试过使用不同的部分和主体 但无济于事 目前我已经编写了一个函
  • 通过 JDBC 调用 Sybase 存储过程时结果集为空

    我正在调用一个通过 JDBC 返回多个结果集的 Sybase 存储过程 我需要获取一个特定的结果集 其中有一列名为 结果 这是我的代码 CallableStatement cs conn prepareCall sqlCall cs reg
  • 在 Java 和 C 中在运行时调用名为“string”的方法

    我们如何调用名称为的方法string在运行时 谁能告诉我如何在 Java 和 C 中做到这一点 在java中可以通过反射api来完成 看一下Class getMethod String methodName Class parameterT
  • 将图像缩略图上传到服务器,而不上传整个图像

    据我所知 我在这里问的是不可能的 但我想无论如何我都会问 以防我遗漏了什么 假设您想让用户上传 JPG 图像 并且这些图像被缩放为较小的图标 并且原始图像始终被丢弃并且不再需要 有没有什么方法可以在大多数现代浏览器中普遍使用 让用户选择硬盘
  • 使用java在mysql中插入带有\\的文件路径

    我正在使用java制作一个独立的应用程序 并且我需要插入用户从文件选择器中选择的图像的路径 我正在获取文件的路径 但是当我将其存储在数据库 mysql 中时 它不会存储 所以当我检索该路径时 该文件不会显示 如何存储文件的路径 这样就可以使
  • SwingWorker 在 Unsafe.park() 处挂起

    我有一个SwingWorker与后台服务器通信 然后更新JFrame 我正在调试我的应用程序并注意到即使在SwingWorker完成了它的工作 它的线程仍然存在 它挂在Unsafe park java lang Object 这是一个本机方
  • 找不到模块:javafx.controls

    我已经下载了JavaFX SDK 解压它并设置PATH TO FX系统变量 如下本说明 https openjfx io openjfx docs install javafx 我使用了以下代码示例 import javafx applic
  • Spring @Transactional 并发

    class MyService 公共无效a 同步 某个键 b Transactional 传播 传播 REQUIRES NEW 公共无效b 数据库工作吗 除非您使用代码编织 否则这是行不通的 Spring处理事务的默认方式是通过AOP代理
  • Apache POI 的 ProGuard 设置

    我正在构建一个使用 Apache POI 库的应用程序 当我调试应用程序 在不运行 Proguard 的情况下编译它 时 一切都运行良好 但是在导出 APK 后 当我运行应用程序并打开 Excel 文件时 出现以下异常 RuntimeExc
  • 摆动刷新周期

    我试图了解何时使用重新验证 重绘 打包 令人惊讶的是 我没有找到详细的底层文档 请随意链接 到目前为止我已经明白这都是 RepaintManager 的责任 油漆 重新油漆指的是脏 干净的东西 pack validate revalidat
  • Hibernate3:自引用对象

    需要一些帮助来了解如何执行此操作 我将在文件系统上运行递归 查找 并且希望将信息保留在单个数据库表中 具有自引用的层次结构 这是我想要填充的数据库表结构 目录对象表 id int NOT NULL name varchar 255 NOT
  • 如何根据服务器/环境动态加载服务器配置?

    目前 我设置了 Maven 配置文件 以便能够为不同的环境 开发 演示 暂存 生产等 部署我的项目 并且它工作得很好 但问题是 对于我拥有的每个模块 Web 应用程序 我需要复制 粘贴此配置文件 它们都是属性文件 当我需要更改环境 服务器配
  • 在 Java Web 应用程序中获取 DataSource 资源

    我的 context xml 文件中有以下资源标记
  • 如果可能,将 jFrame 输出到第二台显示器

    我在 Java 中的 Swing 上有一个 jFrame 我希望它输出到第二个监视器 如果该监视器存在 我尝试过这个 通过this http download oracle com javase 6 docs api java awt Gr
  • 使用 JPA 和 Hibernate 时 DISTINCT 如何工作

    DISTINCT 在 JPA 中使用什么列 是否可以更改它 以下是使用 DISTINCT 的 JPA 查询示例 select DISTINCT c from Customer c 这没有多大意义 不同的列是基于哪一列 它是否在实体上指定为注
  • Ant 类路径和 junit.jar

    我有一个 build xml 它允许我运行 junit 测试 这是相关部分
  • 如何使用 JRE 部署 JavaFX 11 桌面应用程序

    我有一个 JavaFX JDK 8 桌面业务应用程序 它使用 Java Web Start 进行部署 用户安装了 Java 8 只需访问 URL 我的 AWS Linux 服务器上的公共 URL 即可下载 启动应用程序 使用 Web Sta

随机推荐

  • 如何检查命令是否可以执行?

    我有一个脚本将向用户显示一些压缩选项 gzip zip 和 bzip 由于这意味着可以在 Linux 和 Windows 上运行 并且 Zlib 库不可用 因此我必须使用 Unix 命令来压缩任何文件 当然 如果脚本在 Windows 上运
  • 如何使用 T-SQL 进行数据透视表?

    如何从此格式转换表格 Id Data Section 1 1AAA AAA 1 1BBB BBB 1 1CCC CCC 2 2AAA AAA 2
  • Python Websockets 无法通过互联网连接

    我只是想通过互联网获得一个非常基本的 websocket 连接 该代码看起来不错 因为它在连接到本地主机时有效 但由于某种原因 当我尝试通过互联网使用它时失败了 我正在使用网络套接字 https pypi python org pypi w
  • 为 pyspark 设置 SparkContext

    我是新手spark and pyspark 如果有人解释一下到底是什么 我将不胜感激SparkContext参数做什么 我该如何设置spark context对于Python应用程序 See here http spark apache o
  • 为什么 Cloneable 没有被弃用?

    人们普遍认为CloneableJava 中的接口已损坏 造成这种情况的原因有很多 我就不一一列举了 others http howtodoinjava com 2012 11 10 cloneable interface is broken
  • 将生成器对象转换为列表以进行调试[重复]

    这个问题在这里已经有答案了 当我使用 IPython 在 Python 中进行调试时 有时会遇到断点 并且我想检查当前是生成器的变量 我能想到的最简单的方法是将其转换为列表 但我不清楚在一行中执行此操作的简单方法是什么ipdb 因为我对 P
  • 如何使用 matplotlib 为烛台的灯芯部分着色?

    我正在寻找使用 matplotlib 将烛台的灯芯部分变成黑色 我在文档中找不到任何提及它的内容 但我已经看到图片示例表明它可以完成 这是我目前拥有的 这是灯芯被涂成黑色的示例 Update 我使用了下面提供的解决方案 但稍微更改了代码以删
  • 将 iOS (iPhone) 应用程序移植到 Mac?

    有没有首选的方法来解决这个问题 有问题的应用程序不太大 我花了几个月的时间编写的单人游戏 编辑 我应该补充一点 我没有 mac 开发经验 除了作为一名 iOS 开发人员自然而然的事情之外 编辑 游戏中大量使用的类 NSObject UIVi
  • 为注释字段设置默认空值时出错

    为什么我收到错误 属性值必须是常量 不是null持续的 Target ElementType TYPE Retention RetentionPolicy RUNTIME public interface SomeInterface Cla
  • 尝试从 matlab 调用 dll 函数导致崩溃

    我尝试在 MATLAB 中使用第三方外部 DLL 来自 usbmicro 但它总是使 MATLAB 崩溃 这是来自说明 C 程序中函数调用语法的文档 int USBm About char about 我尝试了这个 MATLAB 脚本 是的
  • 如何在受限服务器上安装 Perl 模块?

    我有一个可以通过 ssh 连接的服务器 但仅此而已 否则它就完全与外界隔绝了 我正在尝试部署一些我编写的脚本 但它们有几个 Perl 依赖项 Params Validate XML Simple 等 我无法通过 yum 获取它们 因为我们的
  • preStart 钩子:给 actor 本身的消息

    假设我覆盖了preStart挂接并发送消息至self Class SomeActor extends Actor override def preStart Unit self SomeMessage 我可以期待吗SomeMessage将是
  • Android:TabLayout 不工作

    我正在尝试官方开发人员网站上的 TabLayout 教程 我没有复制粘贴它 也没有对其中的拼写错误进行一些细微的更改和更正 package com org example import android app TabActivity imp
  • 将希腊字符添加到轴标题

    我想在 R 中的条形图的 y 轴上添加一个希腊字符 问题是我需要将这个角色整合到标题中 我想写 Diameter of aperture mu m 在轴标签中 With ylab expression 我可以写希腊字符 ylab axis
  • 如何在类组件中使用useMediaQuery

    当使用函数作为组件时 您可以使用useMediaQuery来自 Material ui 的钩子 然而 它没有向您展示如何在类中使用这个钩子 所以我做了一些研究 发现你可以通过这样做在课堂上使用它 import React from reac
  • python 将字符串转换为参数列表

    我可以在 python 中将字符串转换为参数列表吗 def func args for a in args print a args a func a 2 b 3 I want the following work like above c
  • 如何使用 PHP 确定文件年龄?

    有什么方法可以使用 PHP 确定文件夹中图像的文件年龄 我想删除超过 2 小时的旧文件 是否可以在上传到文件夹时在其文件名中添加时间戳名称 如果是这样 请给我一个例子 thanks if time filemtime filename gt
  • 如何知道missModalViewControllerAnimated何时启动以及何时完成?

    有没有办法知道dismissModalViewControllerAnimated何时启动以及何时完成 例如viewWillAppear和viewDidAppear的习惯用法 与其他动画不同 这个动画似乎没有委托来告诉您 是的 而且比你想象
  • Sklearn Chi2 用于特征选择

    我正在学习 chi2 用于特征选择 并遇到了类似的代码this https chrisalbon com machine learning feature selection chi squared for feature selectio
  • 如何让 Mockito 模拟另一个文件中的常量?

    编辑 我正在测试的方法调用在另一个类中定义的这个常量 所以我想测试该方法是否独立于其他类定义常量的方式工作 嘲笑它是我能想到的第一件事 但我对如何以干净 安全的方式测试它的其他想法持开放态度 类 方法和变量名称已泛化 我正在尝试弄清楚如何编