Assertj:如何按对象内容比较2个对象列表?

2024-04-16

给出以下(快速且缺失的)代码:

class Pair{
int x;
int y;
}

List l1 = Arrays.asList(new Match(1,2), new Match(1,3), new Match(2,3));
List l2 = Arrays.asList(new Match(1,2), new Match(1,3), new Match(2,3));

如何比较列表的内容? 到目前为止我使用的所有内容都检查对象本身是否相等而不是对象值:

assertThat(l1).isEqualTo(l2);
assertThat(l1).containsAll(l2);
assertThat(l1).containsExactly(values);
assertThat(l1).containsExactlyElementsOf(iterable);

我必须为 Match 类实现 equals() 方法吗?

这可能是正确的方法吗?

for (int i = 0; i < l1.size(); i++){
    assertThat(l1.get(i)).usingRecursiveComparison().isEqualTol2.get(i));
}

尝试一下usingRecursiveFieldByFieldElementComparator(recursiveConfiguration),它可以对所有可迭代断言进行递归比较。

Ex:

public class Person {
  String name;
  boolean hasPhd;
}

public class Doctor {
  String name;
  boolean hasPhd;
}

Doctor drSheldon = new Doctor("Sheldon Cooper", true);
Doctor drLeonard = new Doctor("Leonard Hofstadter", true);
Doctor drRaj = new Doctor("Raj Koothrappali", true);

Person sheldon = new Person("Sheldon Cooper", false);
Person leonard = new Person("Leonard Hofstadter", false);
Person raj = new Person("Raj Koothrappali", false);
Person howard = new Person("Howard Wolowitz", false);

List<Doctor> doctors = list(drSheldon, drLeonard, drRaj);
List<Person> people = list(sheldon, leonard, raj);

RecursiveComparisonConfiguration configuration = RecursiveComparisonConfiguration.builder()
                                                                                 .withIgnoredFields("hasPhd")
                                                                                 .build();

// assertion succeeds as both lists contains equivalent items in order.
assertThat(doctors).usingRecursiveFieldByFieldElementComparator(configuration)
                   .contains(sheldon);

See https://assertj.github.io/doc/#assertj-core-recursive-comparison-for-iterable https://assertj.github.io/doc/#assertj-core-recursive-comparison-for-iterable以获得更详细的解释。

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

Assertj:如何按对象内容比较2个对象列表? 的相关文章

  • Java的JConsole可以用来自动配置内存吗?

    我正在学习JavaJMX https docs oracle com javase tutorial jmx and JConsole http docs oracle com javase 7 docs technotes guides
  • 如何从 ArrayList 中删除空白项。不删除索引

    public class ArrayListTest public static void main String args ArrayList al new ArrayList al add al add name al add al a
  • Java中printf左对齐

    当我运行该程序时 阶乘值右对齐 有没有办法让它左对齐 同时保持中间 50 个空格 public class Exercise 5 13 public static void main String args int numbers 1 2
  • 生成固定长度的随机数组[重复]

    这个问题在这里已经有答案了 我只是想更改我的代码 以便每次运行代码时都会生成固定长度 100 个整数的随机数组 而不仅仅是在代码中包含一个预先设置的数组 我对此很陌生 所以只需要正确方向的指导 谢谢 public class Selecti
  • 具有多字符替换的字符串组合(产生返回Java的替代重写)[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 还有另一篇 Stack Overflow 帖子是为与车辆登记号相关的算法创建的 根据输入的车牌 例如ABC123 和列表 替换值 例如
  • 从相对路径读取文件

    我知道这个问题之前已经被问过 1000 次了 我确实尝试了所有解决方案 Java项目中如何从相对路径读取文件 java io File 找不到指定的路径 https stackoverflow com questions 3844307 h
  • 将分区扩展到另一级

    根据下图来自春季批量文档 http docs spring io spring batch reference html scalability html partitioning 主步骤被划分为六个从步骤 它们是主步骤的相同副本 我的问题
  • TestNG 与 DataProvider 并行执行

    我有一个从数据提供者接收数据的测试 我希望此测试与数据提供者的不同值并行运行 我尝试了这样的方法 public class IndependentTest Test dataProvider dp1 threadPoolSize 3 inv
  • 如何抑制有关已弃用 api 的 javac 警告?

    当我编译时 javac 输出 Note Some input files use or override a deprecated API Note Recompile with Xlint deprecation for details
  • 尽管设置为 1.7,IntelliJ IDEA 13 仍使用 Java 1.5

    尽管在所有项目设置中指定了 JDK 1 7 包括File gt Project Structure gt Project Project SDK 则产生以下错误IntelliJ 13当尝试编译一些使用菱形运算符的简单 Java 7 代码时
  • 将一组 Java 对象转换为另一组对象的最佳方式是什么?

    这是一个真正的新手提出的基本 Java 问题 我有一组实现某个接口 接口 MyIfc 的Java对象 属于 MyClass 类 我有一组这些对象存储在我的类中的私有变量中 声明如下 protected Set
  • 将 LinkedHashset 内容复制到新的 ArrayList?

    我有一个最初包含一些内容的 listView 如果它得到相同的内容 我通过删除重复linkedhashset 现在 我想复制linkedhashset内容 即没有重复的内容到新的ArrayList 我尝试复制通过 p addAll 0 lh
  • 无法向 openfire 服务器发送消息

    我无法使用 SMACK API 向 openfire 服务器上的 XMPP 客户端发送消息 我不确定我哪里出错了 我在 gtalk 上测试了相同的代码 它工作正常 public class SenderTest public static
  • 更新(合并)时缺少 Spring Data JPA 验证

    我正在使用 Spring Boot 1 5 4 RELEASE 和 Spring Data JPA 进行项目 遇到更新实体时未执行 Hibernate 验证器或至少在某些情况下未验证的问题 For Person如下所示 禁止使用空名称 并且
  • 如何在javafx中通过事件传递参数?

    我有以下示例 我想将参数 文本 与事件一起传递 当单击按钮 bla 时 我该怎么做 EventHandler
  • 在 Eclipse 中编写链接特定行的注释

    我正在 Java 中使用 Eclipse 并且处理很长的类 我需要这样的功能 在方法的顶部注释中 例如 有一个由该方法执行的操作列表 对于列出的每个操作 我想将注释的一部分 超链接 到相关代码的特定行 然后使用 Ctrl Click 到该行
  • “该选择不能在任何服务器上运行”

    我一直在 Eclipse 中开发一个动态 Web 项目 我收到这个错误 该选择不能在任何服务器上运行 早些时候它工作得很好 但现在我收到了这个错误 我删除了服务器并再次添加 Project gt Right Click gt Propert
  • GWT 和身份验证

    保护 GWT Tomcat 应用程序执行身份验证和授权的最佳策略是什么 有两种基本策略 确保入口点安全 确保远程服务的安全 确保入口点安全 最简单的方法是使用常规 Web 应用程序安全工具限制对 GWT 生成的 html js 文件的访问
  • 返回数据集的 kSoap 和 .Net Web 服务

    我知道使用数据集是一个很大的罪恶 但由于该服务不在我的控制之下 并且创建代理服务的前景是不可能的 我想看看是否有人创建了可以使用 kSoap 序列化器反序列化的类结构 或者我是否吸错了东西 同时要启动它 看看是否可行 以下是预期的结果数据
  • 使用 Java 8 时间将时间从一个时区转换为另一时区

    我正在尝试将日期转换为GMT 5 30 to EST与java 8ZonedDateTime String inputDate 2015 04 30 13 00 DateTimeFormatter sourceFormatter DateT

随机推荐

  • 是否可以在 C++11 之前创建函数局部闭包?

    借助 C 11 我们获得了 lambda 并且可以在我们真正需要的地方 而不是在它们不真正属于的地方 即时创建函数 函子 闭包 在 C 98 03 中 创建函数局部函子 闭包的好方法如下 struct void operator int i
  • Firefox 中的 Html 5 日期选择器

    有什么方法可以设置在带有 HTML 5 的 firefox 版本 21 中启用日期选择器 我不想使用基于 jQuery 的日期选择器 因为将在使用该网站的浏览器中禁用 javascript 日期选择器在 Chrome 上运行良好 因此 如果
  • 删除命名管道.NET

    我使用以下代码列出我的命名管道 private IEnumerable
  • C++/SFML 显示故障,通过鼠标单击更改精灵成员

    我正在学习 C SFML 作为练习 我正在制作一个小程序 在窗口中显示 64x64 像素方形棕色精灵的 10x10 网格 该程序允许您使用键盘选择绿色 黄色 蓝色 灰色 棕色方形精灵 并用该选定的精灵替换所述网格上的任何图块 游戏循环如下
  • 无法将必备组件放在与我的应用程序相同的位置

    我使用 VS 2013 我希望 sql server 2012 express localdb 与我创建安装程序时的应用程序位于同一位置 因此 在项目属性 gt 发布 gt 先决条件中 我选择第二个选项 从与我的应用程序相同的位置下载先决条
  • 块局部变量的语法

    我对定义块局部变量的良好风格感到困惑 选择是 选择A method that calls block v w puts v w 选项B method that calls block v w puts v w 当我希望本地块具有默认值时 混
  • 分离 CodeIgniter 配置文件 Git 以便公开发布

    我即将启动一个基于 CodeIgniter 的项目 并计划使用 Git 作为我们的 DVCS 我将与其他一些开发人员合作 中央 原始 服务器是私人托管的 但我也想开源它 稍后将代码发布到Github 我的问题是 有没有办法在 Git 中分离
  • 轻量级加密密钥交换协议

    我有一个嵌入式系统通过 HTTP 将数据发布到 JSON REST 服务 我目前正在使用 HMAC SHA1 进行身份验证 方式与亚马逊AWS http docs amazonwebservices com AWSSimpleQueueSe
  • 为什么 Facebook 不合并它的 CSS/JS 文件?

    我很好奇为什么 Facebook 开发人员选择不将他们的脚本和样式表合并到单个文件中 相反 它们通过 CDN 按需加载 Facebook 显然是一个非常复杂的应用程序 我可以理解这种模块化如何使 Facebook 更易于维护 但是通常的优化
  • Python:将目录及其子目录中的所有文件名写入文本文件

    我的问题如下 我想列出目录及其子目录中的所有文件名 并将输出打印在 txt 文件中 现在这是我到目前为止的代码 import os for path subdirs files in os walk Users user Desktop T
  • 文件正在被分配一个 //# sourceMappingURL 但已经有一个

    我只是注意到 Firefox 控制台为我的项目中的每个 js coffee 文件 甚至是包 输出以下错误 file is being assigned a sourceMappingURL but already has one Chrom
  • 在 R 中将数字时间转换为日期时间 POSIXct 格式

    我有一个数据框 其中包含已读入 R 的日期时间列 时间值显示为数字时间 如下面的数据示例所示 我想将它们转换为日期时间 POSIXct 或 POSIXlt 格式 以便可以查看日期和时间 tdat lt c 974424L 974430L 9
  • LinkedIn 分享 API-v2 返回炒股

    我对 LinkedIn Shares API 的逻辑完全感到困惑 因为我从有关共享的文档中读到的内容LinkedIn API 共享文档 https developer linkedin com docs guide v2 shares sh
  • javascript正则表达式验证范围内的年份

    我有年份的输入字段 我需要一个正则表达式来验证它 我有这样的代码 12 d d d 但我只想允许验证特定范围内的年份 例如 1990 2010 我该怎么做 编辑 范围必须是 1950 2050 尝试这个 1990 2010 199 d 20
  • 如何使用 Selenium 和 C# 将 Cookie 保存为字符串?

    到目前为止 我使用以下代码实现了获取网站的所有 cookie 我想要的 我不需要也不想要特定的 cookie var cookies driver Manage Cookies AllCookies write full path txt
  • 将 Aiohttp 与代理一起使用

    我正在尝试使用异步从 url 列表 由 ids 标识 中获取 HTML 我需要使用代理 我正在尝试将 aiohttp 与代理一起使用 如下所示 import asyncio import aiohttp from bs4 import Be
  • OpenCV 2.4.2 中的错误“OpenCV 错误:错误标志”

    我刚刚开始尝试使用 OpenCV 并根据一本书编写了一个非常简单的小程序 问题是当我尝试编译它时 出现此错误 我会给你我所掌握的所有信息 我使用 Mac OS X 10 7 的 homebrew 安装了 openCV include
  • PHP找不到tmp目录

    我在 tmp 目录中创建文件的函数遇到问题 例如tmpfile and tempnam 他们似乎都无法写入 tmp 并返回 false upload tmp dir在 php ini 中设置 文件上传工作正常 在调试这个错误时我发现sys
  • 在文本矩阵中使用多个 CGAffineTransform

    我正在使用 Quartz 显示文本 这是我的代码 CGContextRef myContext UIGraphicsGetCurrentContext CGContextSelectFont myContext Helvetica 12 k
  • Assertj:如何按对象内容比较2个对象列表?

    给出以下 快速且缺失的 代码 class Pair int x int y List l1 Arrays asList new Match 1 2 new Match 1 3 new Match 2 3 List l2 Arrays asL