我在Assertion方面有一个小问题,或者可能只是在BigDecimal方面。
我的JUnit测试在使用assertEquals(Object expected, Object actual)
:时抛出错误
java.lang.AssertionError: expected:<10> but was:<10.000000000>
预期是通过以下方式创建的:
BigDecimal expected = MathHelper.getDecimal(10);
MathHelper
中的getDecimal
方法如下所示:
public static final BigDecimal getDecimal(long value) {
return BigDecimal.valueOf(value);
}
actual
是private BigDecimal count
,它的getter方法是经典的getter:
public BigDecimal getCount() {
return count;
}
我完全不知道这里发生了什么。。。
查看BigDecimal
:的equals
方法的文档
将此BigDecimal与指定的Object进行相等性比较。与
compareTo
不同,此方法仅当两个BigDecimal
对象的值和比例相等时才认为它们相等(因此,用此方法进行比较时,2.0不等于2.00)。
所以不,10
和10.000000000
不是相等的,断言错误是正确的。
BigDecimal equals方法考虑了数字的小数位数,所以BigDecimals 12.0和12.00是不同的。您应该使用BigdecimalcompareTo方法。