public class UserAccount {
private Long id;
private String email;
private String activationCode;
private Date createDate;
}
...我需要使用AssertJ将实际对象与预期对象进行比较。但是,id
、ActivationCode
和Createdate
字段具有动态值,我无法将其硬编码到断言中。
因此以下断言将失败:AssertThat(actualUserAccount).IsEqualTo(expectedUserAccount);
然后,我发现以下内容将忽略某些字段:
assertThat(actualUserAccount)
.usingRecursiveComparison()
.ignoringFields("id", "activationCode", "createDate")
.isEqualTo(expectedUserAccount);
或者除了为每个字段编写一个断言之外没有其他方法吗?
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来审核应用程序中的更改,然而,我创建了一个自定义注释,它放在类中的字段上方,如果更改,我希望对其进行审核。下面是一个示例类: