assertEquals的准确性?

时间:2012-02-08 16:40:19

标签: unit-testing assert

我有一个简单的问题:

/**
* Method a1
*
* @param p1 A parameter
* @param p2 A parameter
* @return The return value
*/

    public double a1(double p1, double p2) {
    return (p1 + p2) / 2;
    }

    @Test
    public void testa1() {
    assertEquals(0, a1(32.56, 45.90), 0.0 );
    }

一直给我一个很长的值39.23000000000000004。如何在断言测试位中降低其精度?

2 个答案:

答案 0 :(得分:0)

第一个参数是期望值,第二个参数是实际值,assertEquals的第三个参数是可接受的delta。你可以将它.01或任何你需要的东西。

所以你的陈述应该是

assertEquals(39.23, a1(32.56, 45.90), 0.1 );

双打和花车几乎总是不是你认为的确切数字。这是因为32/64位只能表示那么多精确数字。 无限数字总是无法用完全表示。这就是你需要delta的原因。

答案 1 :(得分:0)

我主要定义一个AssertAlmostEqual以及一个定义精度(或默认参数)的参数。

e.g。     def AssertAlmostEquals(value1,value2,accuracy = 0.000001):          assertEquals(abs(value1 - value2)< accuracy)