[英]JUnit test case failure
这是我创建的立方根方法的测试用例的JUnit代码,它实现了Newton的方法:
@Test
public void standardCase_negative64e9() {
double n = -64E9;
double result = csc143.newton.Roots.cbrt(n);
double delta = n * 1E-8;
assertEquals("Standard cube root -64E9", -4.0E3, result, delta);
}
当我对我的所有测试用例进行测试时(使用DrJave IDE),我只对这个测试用例失败,并且它显示为:
Failure: java.lang.AssertionError: Standard cube root -64E9 expected:<-4000.0> but
was:<-4000.0000000003124>
我觉得这与我的“delta”值(在这种情况下是-640
)有关,因为当我在assertEquals()
方法中用640
(而不是-640
)替换“delta”时,我没有失败...
你的delta
有这个值: -64E9*1E-8
,实际上是-64
。那就是:它是一个负值。 由于delta
预计是实际值和期望值之间差异的上限,因此您需要将其设为正数。
看一下Assert
类的源代码 。 比较双打的地方是doubleIsDifferent
方法:
static private boolean doubleIsDifferent(double d1, double d2, double delta) {
if (Double.compare(d1, d2) == 0) {
return false;
}
if ((Math.abs(d1 - d2) <= delta)) {
return false;
}
return true;
}
如您所见,相关表达式为Math.abs(d1 - d2) <= delta
。 由于它使用Math.abs
因此左侧始终为0或正数。 因此它永远不会小于负值,因此此方法始终返回true
从而向调用者( assertEquals
)指示您的值不同。
换句话说:将delta的定义更改为:
double delta = Math.abs(n * 1E-8);
如果您阅读JUnit Assert的Javadocs,断言等 ,您会看到delta
确实应该是正数:
断言两个双精度或浮点数等于正三角形。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.