在比较两个包含JavaBeans元素的列表和BigDecimals字段时,我尝试使用AssertJ中的BigDecimals,但不起作用。当我比较这两个BigDecimals (例如,1.00和1.000000),使用默认的BigDecimal比较器,断言不会失败(因为通过比较它们是相等的)。
我也写了我自己的BeansFieldByFieldComparator,它可以工作,但我想知道它是否是必要的,因为这样的比较器包含在AssertJ中,也许我用错了方式?但一切都表明我是对的--它不起作用。
JavaBean代码:
@Value
public static class Foo {
BigDecimal bar;
}断言不起作用:
assertThat(asList(new Foo(new BigDecimal("1.000"))))
.usingFieldByFieldElementComparator()
.containsOnlyElementsOf(asList(new Foo(new BigDecimal("1.0000000"))));为什么FieldByFieldComparator不能工作?提前感谢您的帮助:)
发布于 2018-06-03 19:56:59
原因是它使用BigDecimal equals方法来比较bar字段,并且BigDecimal's equals区分2.0和2.00 (usingFieldByFieldElementComparator javadoc声明字段与equals进行比较)。
要让断言通过,可以指定断言应该如何比较BigDecimal和usingComparatorForType,例如:
assertThat(asList(new Foo(new BigDecimal("1.000"))))
.usingFieldByFieldElementComparator()
.usingComparatorForType(BIG_DECIMAL_COMPARATOR, BigDecimal.class)
.containsOnlyElementsOf(asList(new Foo(new BigDecimal("1.0000000"))));其中BIG_DECIMAL_COMPARATOR是通过调用BigDecimal的compareTo方法实现的Comparator<BigDecimal>,请参见org.assertj.core.util.BigDecimalComparator。
https://stackoverflow.com/questions/50661714
复制相似问题