kAn*_*GeL 40 java junit assert bigdecimal
我想在两个十进制之间使用断言,我用这个:
BigDecimal bd1 = new BigDecimal (1000);
BigDecimal bd2 = new BigDecimal (1000);
org.junit.Assert.assertSame (bd1,bd2);
Run Code Online (Sandbox Code Playgroud)
但是JUnit日志显示:
expected <1000> was not: <1000>
Run Code Online (Sandbox Code Playgroud)
frh*_*ack 67
断言两个BigDecimal在数学上相等的官方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));
Run Code Online (Sandbox Code Playgroud)
End*_*ery 23
assertSame检查两个对象是否是同一个实例.assertEquals检查数字和数字是否相等,这意味着即1000不等于1000.00.如果只想比较数值,则应使用compareTo()方法from BigDecimal.
例如:
BigDecimal bd1 = new BigDecimal (1000.00);
BigDecimal bd2 = new BigDecimal (1000);
org.junit.Assert.assertTrue(bd1.compareTo(bd2) == 0);
Run Code Online (Sandbox Code Playgroud)
Swe*_*ens 18
问题的答案已经给出了。但有些答案回答了另一个问题,即“如何比较 2 个 BigDecimals?”。到目前为止给出的解决方案要么是错误的,要么是过时的。我想建议尝试一下这个:
// import static org.assertj.core.api.Assertions.assertThat;
BigDecimal a = new BigDecimal("100")
BigDecimal b = new BigDecimal("100.00")
assertThat(a).isEqualByComparingTo(b);
Run Code Online (Sandbox Code Playgroud)
assertSame测试两个对象是相同的对象,即它们是==:
断言两个对象引用同一个对象.如果它们不相同,
AssertionError则抛出没有消息的消息.
在你的情况下,既然bd1又bd2是新的BigDecimal,那么对象就不一样了,因此也是例外.
你想要的是assertEquals,测试两个对象是否相等,即.equals:
断言两个对象是相等的.如果不是,
AssertionError则抛出没有消息的消息.如果是预期的和实际的null,则认为它们是平等的.
BigDecimal bd1 = new BigDecimal (1000);
BigDecimal bd2 = new BigDecimal (1000);
org.junit.Assert.assertEquals(bd1,bd2);
Run Code Online (Sandbox Code Playgroud)
BigDecimal与compareTo()工作相比(如:它忽略比例并比较实际数字),但在进行单元测试时,了解实际数字是有用的,特别是在测试失败时.
我在这种情况下使用的选项是stripTrailingZeros()两个BigDecimal:
assertEquals(new BigDecimal("150").stripTrailingZeros(),
otherBigDecimal.stripTrailingZeros());
Run Code Online (Sandbox Code Playgroud)
什么这个函数是去除零不换号,所以"150"被转换"1.5E+2":这样,如果你有没关系150,150.00或其他形式otherBigDecimal,因为他们得到归到同一个形式.
唯一的区别是nullin otherBigDecimal会给出一个NullPointerException而不是一个断言错误.
该方法assertSame测试两者是同一个对象.但是,您有两个具有相同值的对象.要测试这个,你可以使用assertEquals.
但是,在s assertEquals上使用(取决于equals方法)时,您应该注意一些意外行为BigDecimal.例如,new BigDecimal("100").divide(new BigDecimal("10.0")).equals(new BigDecimal("10"))求值为,false因为equals还会查看BigDecimal实例的比例.
在许多情况下,最好BigDecimal使用以下compareTo方法比较s :
assertTrue(bd1.compareTo(bd2) == 0);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
29495 次 |
| 最近记录: |