java - AssertJ 无法断言没有比例的 BigDecimal 相等
问题描述
我正在运行这样的断言:
assertThat(obj.getTotal()).isEqualTo(BigDecimal.valueOf(4))
我正进入(状态
期望:<4.00> 等于:<4>
所以我尝试了
assertThat(obj.getTotal()).isEqualTo(BigDecimal.valueOf(4.00))
期望:<4.00> 等于:<4.0>
我找到了一种解决方法,可以将期望值的比例设置4
为4.00
,但是对于测试中的所有 BigDecimal 变量,我必须这样做似乎很烦人。我不知道 AssertJ 有没有更好的方法?
解决方案
您可以使用isEqualByComparingTo
or usingComparator
that useBigDecimal.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));
使用 withIterable
和extracting
断言:
assertThat(asList(new Trade("1", new BigDecimal("5.200")), new Trade("2", new BigDecimal("4.00"))))
.extracting(Trade::getId, Trade::getAmount)
.usingComparatorForType(BigDecimal::compareTo, BigDecimal.class)
.usingRecursiveFieldByFieldElementComparator()
.containsExactlyInAnyOrder(tuple("1", new BigDecimal("5.2")), tuple("2", new BigDecimal("4")));
推荐阅读
- ios - 为什么我的 iOS 应用打开后突然开始崩溃?
- c++ - 如何在全屏模式下(在 OpenGL 中)使背景透明?
- html - 无法将外部 CSS 链接到 HTML
- flutter - Flutter_ffmpeg:如何从 url 或 storage 获取视频和音频
- javascript - 在 React 中,Provider 的值改变后如何设置状态?
- c++ - 构建libssh时在qt和cmake错误上找不到libssh的功能
- c# - Linq 按列表中的元素排序
- git - git reset -- 硬恢复
- c# - byte[] 到 oracle Db 的字符串截断(仅获取部分数据)
- linux - 如何使用 gdb 单步执行可执行文件?