assertj无法Assertbigdecimal等式而不进行缩放

kulphzqa  于 2021-06-30  发布在  Java
关注(0)|答案(2)|浏览(302)

我的Assert是这样的:

assertThat(obj.getTotal()).isEqualTo(BigDecimal.valueOf(4))

我要走了
期望:<4.00>等于:<4>
所以我试着

assertThat(obj.getTotal()).isEqualTo(BigDecimal.valueOf(4.00))

期望:<4.00>等于:<4.0>
我找到了一个解决方法,可以设置期望值的范围 44.00 ,但我不得不在测试中对所有bigdecimal变量都这样做,这似乎相当恼火。有没有一个更好的方式,从资产,我不知道?

7xllpg7q

7xllpg7q1#

你可以用 isEqualByComparingTo 或者 usingComparator 那个用途 BigDecimal.compareTo 它比较实际的数值。这个 equals assertj使用的默认方法根据javadoc执行以下操作:
与compareto不同,此方法仅当两个bigdecimal对象的值和比例相等时才将其视为相等(因此,使用此方法进行比较时,2.0不等于2.00)。
所以你可以:

assertThat(obj.getTotal())
        .usingComparator(BigDecimal::compareTo)
        .isEqualTo(BigDecimal.valueOf(4.00));

或者简单地说:

assertThat(obj.getTotal())
    .isEqualByComparingTo(BigDecimal.valueOf(4.00));
pw136qt2

pw136qt22#

尝试 java.math.BigDecimal.stripTrailingZeros() 方法,如下所示:

// AssertJ
assertThat(obj.getTotal().stripTrailingZeros()).isEqualTo(BigDecimal.valueOf(4));

// Junit
assertEquals(BigDecimal.valueOf(4), obj.getTotal().stripTrailingZeros());

相关问题