我进行了一个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);
您的Double
s会被自动取消装箱,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提升