在谓词中使用isEqualByComparingTo

时间:2018-07-05 19:29:45

标签: comparison predicate matcher assertj

正常使用isEqualByComparingTo之类的好assertj-matchers:

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

但是我有一个BigDecimals列表,并且想使用isEqualByComparingTo之类的assertj的匹配器来检查列表中的每个元素是否相等:

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

相反,我必须使用乏味的低级比较:

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

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

1 个答案:

答案 0 :(得分:1)

尝试使用usingElementComparatorBigDecimalComparator(或编写自己的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"));