首页 > 解决方案 > 在谓词中使用 isEqualByComparingTo

问题描述

正常使用漂亮的 assertj-matchers,例如isEqualByComparingTo

BigDecimal number = ...
assertThat(number).isEqualByComparingTo(BigDecimal.valueOf(...));

但是我有一个 BigDecimals 列表,并希望通过使用 assertj 的匹配器来检查列表中的每个元素是否相等isEqualByComparingTo

List<BigDecimal> numbers = ...
assertThat(numbers).allMatch( ???.isEqualByComparingTo(BigDecimal.valueOf(...) )

相反,我必须使用繁琐的低级比较:

List<BigDecimal> numbers = ...
assertThat(numbers).allMatch( number -> number.compareTo(...) == 0 )

在谓词中使用漂亮的匹配器是否有可能?

标签: comparisonpredicatematcherassertj

解决方案


尝试usingElementComparator使用BigDecimalComparator(或编写您自己的 BigDecimalComparator)。

例子:

List<BigDecimal> numbers = list(new BigDecimal("1.00"), new BigDecimal("2.00"));

assertThat(numbers).usingElementComparator(new BigDecimalComparator())
                   .contains(new BigDecimal("1.0"), new BigDecimal("2"));

推荐阅读