JUnit 断言 BigDecimal

新手上路,请多包涵

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

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

但 JUnit 日志显示:

 expected <1000> was not: <1000>

原文由 kAnGeL 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 562
2 个回答

assertSame 测试这两个对象是相同的对象,即它们是 ==

断言两个对象引用同一个对象。如果它们不相同,则会抛出一个没有消息的 AssertionError

在你的情况下,因为 bd1bd2 都是新的 BigDecimal ,对象不一样,因此异常

你想要的是使用 assertEquals ,测试两个对象是否相等,即 .equals

断言两个对象相等。如果不是,则会抛出一个没有消息的 AssertionError 。如果预期和实际是 null ,则认为它们相等。

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

原文由 Tunaki 发布,翻译遵循 CC BY-SA 3.0 许可协议

断言两个 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));

Hamcrest 1.3 快速参考

原文由 frhack 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题