在 JUnit 中,双精度的 assertEquals 采用绝对的增量。但是百分比值不是比绝对值更适合保证金吗?当比较两个大值时,由于四舍五入引起的误差很可能会导致最后一个有效数字,而与指数无关。在这种情况下,绝对增量没有帮助,不是吗?
这并不难,我写了一个,但只是好奇为什么 JUnit 没有那个功能。我错过了什么吗?
在 JUnit 中,双精度的 assertEquals 采用绝对的增量。但是百分比值不是比绝对值更适合保证金吗?当比较两个大值时,由于四舍五入引起的误差很可能会导致最后一个有效数字,而与指数无关。在这种情况下,绝对增量没有帮助,不是吗?
这并不难,我写了一个,但只是好奇为什么 JUnit 没有那个功能。我错过了什么吗?
这取决于实际情况。如果您有固定的精度,例如两位小数,您可能需要 0.5e-2 的增量,但如果您的精度未知并且想要有效数字,您可能需要更复杂的东西,例如
assertEquals(expected, actual, Math.abs(expected) / 1e3);
相对误差的问题是很难知道它是否应该与预期、实际或两者的某种组合相关。
对于期望值为零的情况,百分比容差是没有好处的,但您愿意接受一个非常小的值就足够了。因此,当前 API 可用于所有数值。
只能假设 JUnit API 中没有任何线索,但它针对的是浮点域中数字表示的微小差异(当小数点后第 15 位存在差异时)。毕竟,从绝对值版本到 procentual 版本比反过来要容易得多。