AssertJ能否递归忽略指定字段进行对象比较?
用AssertJ递归忽略所有层级ID字段比较JPA实体
要实现递归忽略所有层级的id字段来比较实体,你可以用AssertJ的usingRecursiveComparison()方法,它支持配置递归比较的规则,包括全局忽略指定字段:
assertThat(actualEntity) .usingRecursiveComparison() .ignoringFields("id") .isEqualTo(expectedEntity);
这个写法会递归遍历实体的所有嵌套对象、集合元素,忽略每一层级的id字段进行比较,完美解决你遇到的内部实体列表带ID的问题。
如果你的实体里有类似userId、orderId这类带后缀的ID字段,想统一忽略的话,可以用正则匹配:
assertThat(actualEntity) .usingRecursiveComparison() .ignoringFieldsMatchingRegexes(".*id") .isEqualTo(expectedEntity);
补充说明
- 这个方法会自动处理集合、数组里的元素,不需要额外配置就能递归忽略集合内实体的ID
- 如果存在循环引用,AssertJ会自动识别并避免无限递归,不用担心栈溢出问题
内容的提问来源于stack exchange,提问作者Michal Krasny
相关产品推荐
相关产品推荐

