如何实现以下目标:
List<Data> streams = new ArrayList<>(); assertThat(streams).usingFieldByFieldElementComparatorIgnoringGivenFields("createdOn").containsOnly(data1, data2);
v6ylcynt1#
使用ListAssert.usingElementComparatorIgnoringFields(String... fields),其作用与ListAssert.usingFieldByFieldElementComparator()相同,但允许忽略某些字段/属性:对除给定字段/属性之外的所有字段/属性使用逐个字段/属性比较所以你可以这样写:
ListAssert.usingElementComparatorIgnoringFields(String... fields)
ListAssert.usingFieldByFieldElementComparator()
List<Data> streams = new ArrayList<>(); //... Assertions.assertThat(streams) .usingElementComparatorIgnoringFields("createdOn") .containsOnly(data1, data2);
vojdkbi02#
如果您(1)拥有data源代码的控制权,并且(2)正在使用Lombok annotations,则可以针对createdOn字段使用@EqualsAndHashCode.Exclude,例如
data
createdOn
@EqualsAndHashCode.Exclude
import lombok.*; @Data public class Data { @EqualsAndHashCode.Exclude // will not include this field in the generated equals and hashCode methods. private Date createdOn; ... }
这确实简化了测试:
assertThat(streams).containsOnly(data1, data2);
**注意:**如果您确实在Data对象上使用equals()方法作为src/main/java类的一部分,则需要确保其他字段的值足以使对象唯一,以便在使用@EqualsAndHashCode.Exclude时equals()正常工作。
Data
equals()
src/main/java
2条答案
按热度按时间v6ylcynt1#
使用
ListAssert.usingElementComparatorIgnoringFields(String... fields)
,其作用与ListAssert.usingFieldByFieldElementComparator()
相同,但允许忽略某些字段/属性:对除给定字段/属性之外的所有字段/属性使用逐个字段/属性比较
所以你可以这样写:
vojdkbi02#
如果您(1)拥有
data
源代码的控制权,并且(2)正在使用Lombok annotations,则可以针对createdOn
字段使用@EqualsAndHashCode.Exclude
,例如这确实简化了测试:
**注意:**如果您确实在
Data
对象上使用equals()
方法作为src/main/java
类的一部分,则需要确保其他字段的值足以使对象唯一,以便在使用@EqualsAndHashCode.Exclude
时equals()
正常工作。