当前位置: 首页 > 知识库问答 >
问题:

用AssertJ将两个对象与某些字段的“特殊”断言进行比较

陆星文
2023-03-14
public class UserAccount {
  private Long id;
  private String email;
  private String activationCode;
  private Date createDate;
}

...我需要使用AssertJ将实际对象与预期对象进行比较。但是,idActivationCodeCreatedate字段具有动态值,我无法将其硬编码到断言中。

因此以下断言将失败:
AssertThat(actualUserAccount).IsEqualTo(expectedUserAccount);

然后,我发现以下内容将忽略某些字段:

assertThat(actualUserAccount)
        .usingRecursiveComparison()
        .ignoringFields("id", "activationCode", "createDate")
        .isEqualTo(expectedUserAccount);
    null

或者除了为每个字段编写一个断言之外没有其他方法吗?

共有1个答案

皇甫浩壤
2023-03-14
assertThat(actualUserAccount)
        .usingRecursiveComparison()
        .withEqualsForFields((id1, id2) -> id1 instanceof Long && id2 instanceof Long, "id")
        .isEqualTo(expectedUserAccount);

您还可以编写一个泛型方法,如bipredicate isType(T type) ,它返回一个bipredicate,检查两个参数都是类型T(我建议的签名可能不起作用,但您明白了),这样您就可以写:

assertThat(actualUserAccount)
        .usingRecursiveComparison()
        .withEqualsForFields(isType(Long.class), "id")
        .withEqualsForFields(isType(String.class), "activationCode")
        .withEqualsForFields(isType(Date.class), "createDate")
        .isEqualTo(expectedUserAccount);

以下是istype的外观(我还没有测试过):

<A, B, T extends Class<?>> BiPredicate<A, B> isType(T type) {
    return (a, b) -> type.isInstance(a) && type.isInstance(b);
}

话虽如此,我可能不会这样写额外的断言。

 类似资料:
  • 我使用,并在它停止开发后移到。 最近,我被指向Google repository和另一个断言库(http://Google.github.io/truth/)。 阅读这些示例,我没有发现使用start比使用有任何优势。所以用什么只是品味的问题。但也许我没抓住重点,是吗?

  • 我有一个类赋值,我需要将一个目标排序到一个二叉树节点中,给定一个根,我需要将它与根进行比较,如果目标小于根的值,则将目标作为左子,或者如果目标大于根的值,则将目标作为右子。 我必须使用给定的方法头和参数,我的代码是这样编写的: 返回以下错误: java:109:错误:二进制运算符“<”的操作数类型不正确 我还尝试了compareTo方法,通过尝试类似于 返回以下错误: binarySearchTr

  • 我创建了一个,当调用变量为ISE时,它会读取相关数据的表。但是,如果我尝试将与另一个对象进行比较,无法正确读取。我想告诉脚本,如果现有CSV中的任何行与匹配,则不会将数据导出到CSV,换句话说,跳过CSV文件中的重复行。CSV可能有也可能没有多行。

  • 问题内容: 我想比较两个字符串在Java中的相等性(如果一个或两个都可以),因此我不能简单地调用。什么是最好的方法? 编辑: 问题答案: 这是Java内部代码(在其他方法上)使用的:

  • 为了单元测试DTO,我想使用AssertJ的递归比较来比较两个对象(DTO和一个实体)- 我尝试过以下配置,但运气不佳: 比较阶级: DTO: 实体: 在这种情况下,如何配置assertJ?

  • 我有一个Java8/Maven/Spring Boot项目。我使用Javers来审核应用程序中的更改,然而,我创建了一个自定义注释,它放在类中的字段上方,如果更改,我希望对其进行审核。下面是一个示例类: