首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么来自assertJ的FieldByFieldComparator不能工作?

为什么来自assertJ的FieldByFieldComparator不能工作?
EN

Stack Overflow用户
提问于 2018-06-03 06:32:04
回答 1查看 634关注 0票数 0

在比较两个包含JavaBeans元素的列表和BigDecimals字段时,我尝试使用AssertJ中的BigDecimals,但不起作用。当我比较这两个BigDecimals (例如,1.00和1.000000),使用默认的BigDecimal比较器,断言不会失败(因为通过比较它们是相等的)。

我也写了我自己的BeansFieldByFieldComparator,它可以工作,但我想知道它是否是必要的,因为这样的比较器包含在AssertJ中,也许我用错了方式?但一切都表明我是对的--它不起作用。

JavaBean代码:

代码语言:javascript
复制
@Value
public static class Foo {
    BigDecimal bar;
}

断言不起作用:

代码语言:javascript
复制
assertThat(asList(new Foo(new BigDecimal("1.000"))))
.usingFieldByFieldElementComparator()
.containsOnlyElementsOf(asList(new Foo(new BigDecimal("1.0000000"))));

为什么FieldByFieldComparator不能工作?提前感谢您的帮助:)

EN

回答 1

Stack Overflow用户

发布于 2018-06-03 19:56:59

原因是它使用BigDecimal equals方法来比较bar字段,并且BigDecimal's equals区分2.02.00 (usingFieldByFieldElementComparator javadoc声明字段与equals进行比较)。

要让断言通过,可以指定断言应该如何比较BigDecimalusingComparatorForType,例如:

代码语言:javascript
复制
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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50661714

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档