JUnit assertEquals(double expected, double actual, double epsilon):断言两个double类型的值在给定的精度范围内相等。

111

可能是重复问题:
JUnit:assertEquals用于双精度值

显然,assertEquals(double expected,double actual)已被弃用。

鉴于其广泛使用,JUnit的javadoc令人惊讶地缺乏。您能否向我展示如何使用新的assertEquals(double expected,double actual,double epsilon)


3
请查看以下带答案的问题 - Constantiner
1
是的,我刚意识到这是一个重复的内容。 - LuxuryMode
2
如果这是一个重复的内容,请在评论中指出,而不是只把链接当做新答案提交。 - skaffman
是的,这是一个重复的问题。我投票关闭了它。谢谢大家! - LuxuryMode
1个回答

183

Epsilon是“模糊因子”,因为双精度数值可能不完全相等。Epsilon允许您描述它们需要多接近。

如果您期望得到3.14159,但接受从3.14059到3.14259之间的任何值(即0.001以内),那么您应该写类似于:

double myPi = 22.0d / 7.0d; //Don't use this in real life!
assertEquals(3.14159, myPi, 0.001);

(顺便说一下,22/7等于3.1428+,这将未通过验证。这是一件好事。)

我有一个特殊的max函数,其中 max(NaN,3.0) 的结果是 3.0,与原来的行为相反,它会返回 NaN。在我的测试用例中,期望使用assertEquals(double,double),我不知道为什么它已经被弃用了。有时即使你使用 float 或者 double,你也可以期望获得准确的结果。 </rant> - Notinlist
Delta值实际上是允许在比较中存在的“错误”或“不确定性”。其他流行的测试框架,如TestNG和MsTest也有类似的AssertEqual方法。TestNG具有assertEquals(double actual,double expected,double delta)方法,NUnit具有Assert.AreEqual(double expected,double actual,double tolerance)方法,MsTest具有Assert.AreEqual Method(Double,Double,Double)方法。 - Ravishankar S

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