如何在 Hamcrest 中使用(原始)自动装箱/加宽?

2024-04-22

我碰到https://code.google.com/p/hamcrest/issues/detail?id=130 https://code.google.com/p/hamcrest/issues/detail?id=130为 Hamcrest 匹配器添加一些糖语法。但这个想法遭到了 Hamcrest 开发商的拒绝。

还有其他聪明的想法可以通过避免在 long 后面输入 L 来使测试更具可读性吗?

@Test
public void test1() {
    int actual = 1;
    assertThat(actual, is(1));
}

@Test
public void test2() {
    long actual = 1L;
    assertThat(actual, is(1)); // fails as expected is <1> but result was <1L> 
    // assertThat(actual, is(1L)); off course works..
}

@Test
public void test3() {
    Long actual = new Long(1);
    assertThat(actual, is(1)); // fails as expected is <1> but result was <1L>
}

UPDATE

另请参阅下面比较时的差异,例如int 和 long 使用默认的 Java 语言 (==)、标准 junit 断言 (assertTrue) 和 hamcrest is() 方法。看起来很奇怪 hamcrest 不支持匹配/比较 long 与 int ,其余的都是。

@Test
public void test2() {
    long actual = 1L;
    int expected = 1;
    assertTrue(expected == actual); // std java succeeds
    assertEquals(expected, actual); // std junit succeeds
    assertThat(actual, is(expected)); // hamcrest fails: Expected: is <1> but: was <1L>
}

这与您链接的问题完全无关,该问题是关于解决错误的静态分析器并被正确拒绝的。您遇到的问题在 Java 中混合基本类型时很常见。

为了避免输入L你必须提供所有匹配器的重载版本——而不仅仅是is。考虑这些例子:

assertThat(longValue, greaterThan(1));
assertThat(longList, contains(1, 2, 3));

Update

您可以轻松添加自己的重载版本来执行转换:

public static Matcher<Long> is(Integer value) {
    return org.hamcrest.core.Is.is(value.longValue());
}

当然,既然你已经有了一个可以转换的int to long你会想要一些float and double:

public static Matcher<Long> is(Float value) {
    return org.hamcrest.core.Is.is(value.longValue());
}

public static Matcher<Long> is(Double value) {
    return org.hamcrest.core.Is.is(value.longValue());
}

由于 Java 不会自动转换为byte to Integer*,您还需要以下版本byte and short。这已经够难看的了,但是如果转换为其他类型呢?int to double?

public static Matcher<Double> is(Integer value) {
    return org.hamcrest.core.Is.is(value.doubleValue());
}

编译错误:重复方法为(Integer)

呃哦!这些不起作用,因为 Java 不允许您根据返回类型重载方法。您必须在我留给您的单独的类中声明这些方法。

考虑到这会造成巨大的混乱,我怀疑 Hamcrest 的作者会愿意接受这样的添加,因为回报很低。老实说,你最好使用明确的方式1L and 1.0如所须。

* 虽然编译器will转换自byte to int可以装箱到Integer.

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

如何在 Hamcrest 中使用(原始)自动装箱/加宽? 的相关文章

  • 使用 REST API 实现属性/字段级安全

    我正在为支持多租户授权模型的 REST API 构建概念验证 该模型不仅控制用户可以访问哪些对象 还控制对象中的字段 此模型的目标是确保租户管理员只能修改其租户并且只能查看允许的对象属性 我有一个正在开发的现有代码库 可在以下位置公开获取
  • Zuul不转发请求到其他微服务

    我正在使用 Spring Boot 微服务 我已经配置了 eureka zuul 代理和另一个微服务 帐户 如果我直接从帐户拨打电话 则工作正常 帐户和 zuul 服务器都显示在 eureka 上 当我尝试使用 zuul 代理进行访问时 它
  • Java 访问被拒绝

    C Program Files x86 Java jdk1 6 0 17 bin gt javac VendingMachine java VendingMachine java 27 error while writing Vending
  • 在 Java 中,三个 true 输入的 XOR 返回 true。为什么?

    下面的代码 System out println 1 0 0 true false false System out println 1 0 1 true false true System out println 1 1 0 true t
  • Java 区域设置区分大小写

    我有以下代码来显示当前区域设置 System out println Locale getDefault System out println new Locale en US 上面给出的输出如下 en US en us 如何构造一个 Lo
  • 在 Spring 中使用事务时创建提交后

    由于某些原因 我使用 Spring PlatformTransactionManager 手动执行事务提交和回滚 我需要做的是设置一个钩子 以便在提交事务后发生提交后操作 通过查看 void commit TransactionStatus
  • Gradle中的build-by-convention深度解释是什么?

    The 摇篮用户指南 http www gradle org docs current userguide userguide html经常提到 Gradle 是陈述性的和用途按惯例构建 这是什么意思 据我了解 这意味着 例如 在java插
  • 我在 Android Studio 中使用哪个版本的 JDK 有关系吗?

    I know I can choose the SDK location in Android Studio s Project Structure 我有两个问题 当我们已经使用Android SDK时 为什么还需要JDK 毕竟我们不是为
  • 如何设置Java线程的CPU核心亲和力?

    我搜索了以前关于类似主题的帖子 但找不到合适的答案 因此提出这个问题 非常感谢您帮助回答 我知道在 Linux 中通过任务集命令设置进程与特定 CPU 核心的关联性 但我想设置 Java 线程与特定 cpu 核心的亲和力 以便属于同一进程的
  • CreationException:无法在 Play 2.5.18 中创建注入器错误,以使用 com.google.inject.AbstractModule 替换 GlobalSettings Java 代码

    我正在将 Play 应用程序从 2 5 12 升级到 2 5 18 当我启动该应用程序时 使用sbt 我收到此错误 CreationException 无法创建注入器 看到以下错误 1 Error injecting constructor
  • 使用 Windows 锁定屏幕后删除 Kerberos 缓存票证

    无论如何 有没有办法阻止 Kerberos 缓存的票证在 Windows 进入锁定屏幕后被删除 首次登录 Windows 时 klist exe 显示 2 个缓存票证 但是 发生 Windows 锁屏事件后 klist exe 显示 0 个
  • 如何将多个值存储到一个键(java)

    我搜索一个可以存储多个键值对的数据结构 数据基本上是这样的 1 value 1 2 value 2 于是我想到了使用HashMap 遗憾的是 这对我不起作用 因为一个键可能会出现多个值 在上面的例子中 1 value 2 可能是另一个条目
  • Java SSO 与 Wildfly 8、Java 1.8.0_45 和 Active Directory

    我对这个主题进行了很多搜索 但找不到解决方案 要求的简短描述 Wildfly 8 2 下 Web 应用程序上的 SSO 在 Active Directory 中验证 Windows 用户的身份 当 SSO 失败时回退到登录表单 在 Wild
  • 从两个数组中查找公共文件

    我正在尝试从两个数组中查找通用名称文件 我已将两个不同文件夹的文件名保存在两个不同的数组中 现在我正在创建一个通用文件数组 其中包含具有通用名称的文件 filenames 1 包含文件夹 1 中文件名称的数组 filename2 包含文件夹
  • 为什么对象可以改变类变量的值?

    由甲骨文提供定义 http docs oracle com javase tutorial java javaOO classvars html 有时 您希望拥有所有对象共有的变量 这是通过 static 修饰符来完成的 声明中带有 sta
  • 使用 testcontainer 作为 Dockerfile 的一部分运行测试

    我的 dockerfile 看起来像这样 FROM maven 3 jdk 11 slim COPY pom xml COPY src src RUN mvn clean install 这意味着构建的一部分是单元测试的执行 一些单元测试使
  • 错误:找不到符号 ArrayList

    我正在尝试创建某种列表来存储数组 表 中的值 我在这里使用数组列表 但我应该使用列表吗 但是 每次我尝试编译时 它都会引发以下错误 找不到标志 符号 ArrayList类 位置 玩家类 TablePlayer 代码如下 public cla
  • Xuggler 未转换 .webm 文件?

    我只是尝试使用 Xuggler 将 mov 文件转换为 webm 这应该可以工作 因为 FFMPEG 支持 webm 文件 这是我的代码 IMediaReader reader ToolFactory makeReader home use
  • 在 Android 版 ORMLite 中加入类会引发 SQL 异常:找不到外部类,反之亦然

    我正在尝试使用 QueryBuilder 为两个不同的类创建一个联接查询 一个Product类和一个Coupon类 引用 Product 属性 storeId public class Coupon DatabaseField column
  • java银行程序帐户ID不上去?

    每次创建银行帐户时 帐户 ID 都应增加 1 但每次我尝试提取 Id 时 我只会得到帐户 ID 为 0 任何建议 因为我完全按照我学习的书中的方式进行操作而且它仍然没有更新 帐户构造函数 public class BankAccount p

随机推荐

  • 如何实现一套?

    我想用C实现一个Set 创建 SET 时可以使用链表吗 还是应该使用其他方法 您通常如何实现自己的集合 如果需要 笔记 如果我使用链表方法 我的 Set 操作可能会遇到以下复杂性 初始化 O 1 销毁 O n 插入 O n 删除 O n 并
  • 如何在 Xcode 4 中使用 .xcconfig 文件?

    我刚刚切换到 Xcode 4 但在使用 xcconfig 文件进行构建设置时遇到问题 我的目标已经在 Xcode 3 中分配了文件 并且已全部设置完毕 标题为 Config file 的列显示在 构建设置 的 级别 视图中 但我不知道如何编
  • 如何创建一个修改结构体的函数

    我正在制作一个程序 使用结构将学生成绩放入数组中作为期末练习 我需要创建一个函数来检查数组中是否还有任何位置 如果没有 则数组的大小需要加倍 然后需要将成绩添加到下一个可用位置 如果数组有空缺职位 则应将等级值添加到下一个可用职位 每当数组
  • 如何确定我的应用程序是在 x86 还是 x64 Windows 上运行?

    我想知道 在运行时 我是在 32 位还是 64 位 Windows 上运行 OSVERSIONINFOEX 结构告诉我主要版本和次要版本 但我猜我需要内部版本号 有人知道它们是什么吗 如果您的应用程序是针对 64 位编译的 那么答案很简单
  • 测试登录用户在 Laravel 4 中具有正确的 id

    我正在尝试弄清楚如何测试 Laravel 4 中的登录用户是否可以访问正确的用户帐户 目前这就是我的routes php 文件中的内容 Route get user id array before gt auth function logg
  • 方案功能[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我试图解释这个方案函数的作用 define y s lis cond null lis equal s car lis lis else
  • 如何将 FragmentTabHost 选项卡放在屏幕底部?

    我已经尝试过以下代码 它对齐选项卡小部件上方的框架布局 但它仍然不起作用
  • 在 Android 中以编程方式添加 FilterChips

    我正在尝试做出一个有多种选择的芯片选择 就我而言 我将有动态选择 因此我必须动态创建芯片 我成功地动态创建了它 但由于多重选择需要一个名为style style Widget MaterialComponents Chip Filter 我
  • Linux 内核:为什么调用 kstrtol 会崩溃?

    我正在学习内核编程 并且对 kstrtol 进行了简单的调用 我用它来将字符串转换为数字 然而 每次我编译这个模块并使用 insmod 将其放入内核时 我都会收到 BUG 无法处理 f862b026 处的内核分页请求 然后是寄存器和堆栈转储
  • 对象不支持项目分配错误

    In my views py我在保存表单之前分配值 我以前是按以下方式做的 projectForm lat session results lat projectForm lng session results lng 现在 由于变量列表有
  • DACPAC 不包括复合对象

    我有一个 VS2012 数据库项目 其中包括表 存储过程 视图等 然后我有第二个数据库项目 其中包含对第一个项目的数据库引用 我已确保从 项目属性 gt 调试 gt 高级 菜单中选择 包括复合对象 选项 当我构建第二个项目并获取生成的 DA
  • 为什么我可以通过字符串索引来获取属性值但不能设置它?

    我试图解决这另一个问题的问题 https stackoverflow com questions 67809891 is it possible to reduce generic objects with unknown property
  • 如何在Android中制作倒计时器?

    我有两个 XML 格式的 EditText 在一个 EditText 中 用户可以输入一个数字作为分钟 在另一个 EditText 中输入一个数字作为秒 单击完成按钮后 EditText 应该开始倒计时并每秒更新其文本 此外 我怎样才能保持
  • 如何使用 T-SQL 或 .net 代码将 Mdf/ldf 数据库文件转换为 .bak 文件(数据库恢复)

    我有 sql server 数据库文件 Mdf Ldf 我想使用 T SQL 命令或 net 代码 C 或 Vb net 将它们转换为备份文件 有什么建议 thans BACKUP DATABASE NameOfDatabase TO DI
  • 使用套接字时避免垃圾收集

    在我的一个游戏项目中 我尽力避免创建对象 从而阻止垃圾收集器运行 这是一个网络游戏 我主要发送数据的字节数组 但也发送一些其他对象 例如 int 数组 我在分析 Eclipse 中的内存分配时注意到 通过我向套接字写入 读取的方式 在我的程
  • 无法使用变异成员...因为追加?

    我很困惑为什么会收到此错误 swift 4 2 1 next select only entries in range let filteredDataOpt TimeSeriesEntry filteredApps map data in
  • VS 2015 到 2017 迁移到包参考失败

    我继承了一个 VS 2015 C 应用程序 并希望将其迁移到 VS 2017 或 2019 它有一个包含 4 个包的 packages config 文件
  • R:循环数据框,根据日期提取数据子集

    我有一个大型数据框 其中包含如下所示的数据 date w x y z region 1 2012 01 21 43 12 3 NORTH 2 2012 02 32 54 21 16 NORTH 3 2012 03 14 32 65 32 N
  • Java中的构造函数和new运算符

    从类创建新对象Student在Java中我们通常使用以下语句 Student std new Student 我读过 new 运算符通过在堆中分配内存空间来创建新对象 但是我还读到调用构造函数Student 创建它 所以 这有点令人困惑 哪
  • 如何在 Hamcrest 中使用(原始)自动装箱/加宽?

    我碰到https code google com p hamcrest issues detail id 130 https code google com p hamcrest issues detail id 130为 Hamcrest