我有一个JUnit测试断言两双对象有以下几点:
Assert.assertEquals(Double expected, Double result);
这是很好然后我决定改变使用基本的double而不是里面竟然被弃用,除非您还提供了一个三角洲。
所以我想知道什么是什么是使用双重目标或在此的assertEquals基本类型之间的区别? 为什么使用对象,而不确定的增量,但然后使用无增量的原语已经过时? 就是Java做的已经有考虑到一个默认的delta值的背景是什么?
谢谢。
我有一个JUnit测试断言两双对象有以下几点:
Assert.assertEquals(Double expected, Double result);
这是很好然后我决定改变使用基本的double而不是里面竟然被弃用,除非您还提供了一个三角洲。
所以我想知道什么是什么是使用双重目标或在此的assertEquals基本类型之间的区别? 为什么使用对象,而不确定的增量,但然后使用无增量的原语已经过时? 就是Java做的已经有考虑到一个默认的delta值的背景是什么?
谢谢。
没有使用JUnit断言方法与签名
assertEquals(Double expected, Double result);
还有一个,不过,通用的对象:
assertEquals(Object expected, Object result);
这将调用对象的equals
方法,正如你所期望的,所以不建议使用这种比较Double
对象。
对于双打,当你观察到的,这是绝对必要使用增量进行比较,以避免浮点舍入的问题(在其他一些答案解释的话)。 如果你使用的3参数版本assertEquals
有double
参数
assertEquals(double expected, double actual, double delta);
你的Double
旨意让默默拆箱到double
,一切都将正常工作(和你的测试不会失败意外:-)。
双数学很少,如果给出了完全相等的结果。 例如, 0.1 * 0.1 != 0.01
。 你通常需要至少在比较双精度结果有一定增量。
在另一方面,如果您要比较盒装Double
S,它假定你想要的确切平等。 Java没有考虑到一个默认的delta值,但Double.equals
具有略微不同的行为==
:特别是, 其处理的NaN 。
这使得在测试的意义,因为Double.NaN != Double.NaN
,但在测试中,如果你希望一个NaN
和NaN
返回,这是一个正确的答案。
最好写是这样的:
assertEquals(23.0, 250.0, 0.0)
0.0 - 它是三角形。 了解为什么你的方法已被弃用。
资源。 断言两个双打或浮筒都等于一个正增量内。 如果不是,一个AssertionError被抛出。 如果预期值为无穷大,则差值是ignored.NaNs被视为相等。
我想说的是比较双打,原始或对象,是一个没有增量没用。 知道如何流动的点数工作的关键是做数字工作。
对象使用的可能是幕后.equals; 原始具有除了==别无选择。
只是因为对象版本没有使用的增量,并不意味着更好的主意。