java - 断言等于 int long float

标签 java junit

有没有一种优雅的方式来断言数字相等而忽略它们的类?我想在 JUnit 测试框架中使用它,但是例如

Assert.assertEquals(1,1L)

因 java.lang.AssertionError 失败:预期:java.lang.Integer<1> 但为:java.lang.Long<1>

我希望某处有一个很好的方法,它只比较值并适用于 int、long、float、byte、double、BigDecimal、BigInteger,你可以命名它......

最佳答案

一种需要一些开销的解决方法是将值包装在 BigDecimal 中。对象,因为 BigDecimal 构造函数重载采用 longintdouble 原语。

由于 new BigDecimal(1l).equals(new BigDecimal(1.0)) 持有 true

Assert.assertEquals(new BigDecimal(1.0), new BigDecimal(1l));  

应该适合你。

编辑

作为 Hulk如下所述,BigDecimal 对象的比例用于 equals 比较,但不用于 compareTo 比较。 虽然使用 long 的构造函数的比例设置为默认 0,但它是通过使用 double 的构造函数中的一些计算推断出来的。 因此,比较值的最安全方法(即在 double 值的边缘情况下)可能是通过调用 compareTo 并检查结果是 0 代替。

关于java - 断言等于 int long float,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41242135/

相关文章:

java - 无法从 IDEA 13.0 IDE 为导入的 gradle 项目运行 Junit 测试

java - Junit Mockito 测试一切

scala - intellij Junit 为 scala 生成测试类

java - 使用 Apache POI 更改图像布局或包装在 DOCX 中

java - 在java中检测汉字

java - 尝试理解 ArrayList 的 hashCode() 实现

java - ECL Emma如何处理测试资源

java - 循环测试结果为空,程序崩溃

java - Cucumber无法读取定义文件

unit-testing - 手动创建 JUnit Result 对象