JUnit断言:浮点数之间的断言

60

我需要比较两个值:一个是字符串,另一个是浮点数。因此,我将字符串转换为浮点数,然后尝试调用assertEquals(val1,val2)方法进行比较,但这是不允许的。我猜测assertEquals不接受浮点数作为参数。

在这种情况下,我的解决方案是什么?

2个回答

112

对于浮点数,您必须提供一个 delta 值来进行断言:

Assert.assertEquals(expected, actual, delta)

当 delta 是期望值和实际值之间的最大差异(delta),在此差异范围内两个数字仍被认为相等。

Assert.assertEquals(0.0012f, 0.0014f, 0.0002); // true
Assert.assertEquals(0.0012f, 0.0014f, 0.0001); //false

13

即使是旧式的“==”比较(请谨慎使用!),值为0.0f也可以正常工作,因此您可以编写以下代码:

Assert.assertEquals(expected, actual, 0.0f);

代替

Assert.assertEquals(expected, actual); // Deprecated
Assert.assertTrue(expected == actual); // Not JUnit

我喜欢JUnit的做法,它确保你真的考虑了“delta”,在非常琐碎的情况下应该只是0.0f。


我建议使用0.0f(包括加粗文本的答案编辑)而不是其他选项,因为它更语义化。我之前不知道这个问题,但0.0f可以让我理解意图。使用已弃用或“非JUnit”方式则不太明显。 - ElMesa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接