当前位置: 首页 > 面试题库 >

assertEquals(Double,Double)和assertEquals(double,double,delta)之间的Junit差异

叶景龙
2023-03-14
问题内容

我进行了一个junit测试,使用以下命令声明了两个Double对象:

Assert.assertEquals(Double expected, Double result);

很好,然后我决定将其更改为使用原始double,除非您也提供了增量,否则该结果被弃用了。

所以我想知道在assertEquals中使用Double对象还是原始类型有什么区别?为什么不使用不带增量的对象,但不推荐使用不带增量的基元呢?Java是否在后台执行了已经考虑了默认增量值的操作?

谢谢。


问题答案:

没有断言方法的JUnit与签名

assertEquals(Double expected, Double result);

但是,有一个通用的对象:

assertEquals(Object expected, Object result);

这将调用对象的equals方法,并且您可以预期,不建议使用此方法来比较Double对象。

如您所见,对于双精度数,绝对有必要使用增量进行比较,以避免浮点舍入的问题(在其他一些答案中已有说明)。如果您使用assertEquals带有double参数的3参数版本

assertEquals(double expected, double actual, double delta);

您的Doubles会被自动取消装箱,double并且一切都会正常运行(并且测试不会意外失败:-)。



 类似资料:
  • 问题内容: 我想知道为什么不推荐使用。 我曾经使用过JUnit 4.11。 下面是我的代码: 返回一个双精度值。 有什么事吗 问题答案: 由于double的精度问题而已弃用。 如果您注意到,还有另一种允许精度损失的方法。 JavaDoc: 断言两个双打等于正增量内。如果不是,则会引发AssertionError。如果期望值是无穷大,则将忽略增量值.NaN被视为相等:通过 … delta-期望值与实

  • 我想知道为什么不推荐使用。 我使用了导入静态组织。朱尼特。明确肯定资产质量 我使用了JUnit 4.11。 下面是我的代码: 返回一个双倍值。 有什么可能是错的?

  • 问题内容: 我知道这是一个包装类,它包装数字。今天,我看到了另一个主要区别: 我真奇怪! 因此,如果每次使用,我们都必须执行以下操作: 我无法解释为什么Double直接将比较做错了。请为我解释。 问题答案: 而在技术上两个不同的对象和运营商只比较引用。 更好,因为它比较值而不是引用。但是仍然不理想。直接比较浮点值应始终将一些误差(ε)考虑在内()。 注意: 这里的比较会产生,但是比较复杂(内部缓存

  • 为什么在JUnit5中不再推荐assertEquals(double,double)?

  • 描述 (Description) C库函数double fmod(double x, double y)返回x的余数除以y 。 声明 (Declaration) 以下是fmod()函数的声明。 double fmod(double x, double y) 参数 (Parameters) x - 这是具有除法分子iex的浮点值 y - 这是具有除法分母iey的浮点值 返回值 (Return Va

  • 描述 (Description) C库函数double pow(double x, double y)将x提升为y的幂,即x y 。 声明 (Declaration) 以下是pow()函数的声明。 double pow(double x, double y) 参数 (Parameters) x - 这是浮点基值。 y - 这是浮点功率值。 返回值 (Return Value) 此函数返回将x提升