单位测试双位数失败

时间:2012-08-09 09:37:01

标签: c# unit-testing testing tdd nunit

我正在测试方差方法(单位),但发生了双重问题。

    public double Variance()
    {
        return Probablity * (1 - Probablity);
    }

    [Test]
    public void Variance_WithSuccessProbablity02_Returns016()
    {
        var bernoulli = new BernoulliDistribution(0.2);

        Assert.AreEqual(bernoulli.Variance(), 0.16);
    }

此测试结果是返回失败。 失败:预期:0.160000000000003d但是为0.16d

3 个答案:

答案 0 :(得分:2)

在NUnit中,您可以使用显式容差来比较浮点值:

Assert.AreEqual( double expected, double actual, double tolerance );

或者您可以将GlobalSettings.DefaultFloatingPointTolerance全局设置为非零值(默认情况下为0.0)。

有关浮点比较的更多信息here

在您的具体情况下,我建议您尝试这样做:

Assert.AreEqual(bernoulli.Variance(), 0.16, 1.0e-9);

答案 1 :(得分:1)

使用浮动或双打时经常会出现这种精确问题。

你需要从你的方差中允许一个小的“方差”(借口双关语)。

答案 2 :(得分:1)

Assert.IsTrue(Math.Abs(bernoulli.Variance() - 0.16d) < 0.00001d);