JUnit Assert with BigDecimal

2022-08-31 15:30:10

我想使用2两个小数之间的断言,我使用这个:

BigDecimal bd1 = new BigDecimal (1000);
BigDecimal bd2 = new BigDecimal (1000);
org.junit.Assert.assertSame (bd1,bd2);

但 JUnit 日志显示:

expected <1000> was not: <1000>

答案 1

官方的 junit 解决方案是断言两个大十进制在逻辑上相等的,是使用 hamcrest。

java-hamcrest 2.0.0.0中,我们可以使用以下语法:

    // import static org.hamcrest.MatcherAssert.assertThat;
    // import org.hamcrest.Matchers;

    BigDecimal a = new BigDecimal("100")
    BigDecimal b = new BigDecimal("100.00")
    assertThat(a,  Matchers.comparesEqualTo(b));

Hamcrest 1.3 快速参考


答案 2

assertSame检查两个对象是否为同一实例。检查数字在值和刻度上是否相等,这意味着1000不等于1000.00。如果只想比较数值,则应使用 from 中的方法。assertEqualscompareTo()BigDecimal

例如:

BigDecimal bd1 = new BigDecimal (1000.00);
BigDecimal bd2 = new BigDecimal (1000);
org.junit.Assert.assertTrue(bd1.compareTo(bd2) == 0); 

推荐