如何解决AssertJ无法断言BigDecimal相等而没有规模
我正在运行这样的断言:
assertThat(obj.getTotal()).isEqualTo(BigDecimal.valueOf(4))
我得到了
预期: 等于:
所以我尝试了
assertThat(obj.getTotal()).isEqualTo(BigDecimal.valueOf(4.00))
预期: 等于:
我找到了一种解决方法,可以将期望值4
的范围设置为4.00
,但是对于测试中的所有BigDecimal变量都必须这样做,这似乎很令人讨厌。我不知道AssertJ有更好的方法吗?
解决方法
您可以使用isEqualByComparingTo
或usingComparator
,它们使用BigDecimal.compareTo
比较实际数值。 assertj默认使用的equals
方法根据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));
,
尝试使用java.math.BigDecimal.stripTrailingZeros()
方法,如下所示:
// AssertJ
assertThat(obj.getTotal().stripTrailingZeros()).isEqualTo(BigDecimal.valueOf(4));
// Junit
assertEquals(BigDecimal.valueOf(4),obj.getTotal().stripTrailingZeros());
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。