Visual Studio单元测试:为什么测试运行不确定而测试相同的浮点值?

use*_*291 10 c# unit-testing visual-studio

我正在学习VS单元测试并试过这个:

    [TestMethod()]
    public void calcTest()
    {
        double expected = 1.234F; // TODO: Initialize to an appropriate value
        double actual;
        actual = 1.234F;
        Assert.AreEqual(expected, actual);
        Assert.Inconclusive("Verify the correctness of this test method.");
    }
Run Code Online (Sandbox Code Playgroud)

运行这种测试方法时,它说不确定??? 为什么?

更新:嗨,伙计们可以告诉我们不要比较花车,但是商业要求就是它们,所以如果我需要比较它们该怎么办?

你是说在没有头痛的情况下测试浮动计算是不可能的吗?那么,如果测试是如此令人头疼的财务计算,那么根本不进行测试是不是更好?

看起来像在测试框架中的一个巨大的bug或设计缺陷而不是:)正如这里所说的 http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.testtools.unittesting.assert.inconclusive%28VS. 80%29.aspx

表示无法证明断言是真还是假.

因为我比较了2个相同的litteral确定它是真的!

Mar*_*ell 17

呃,因为你告诉它了?

Assert.Inconclusive("Verify the correctness of this test method.");
Run Code Online (Sandbox Code Playgroud)

现在你有了AreEqual,你应该可以删除它Inconclusive

测试期间的任何失败(不包括您有意处理的异常)通常都是终端,但任何通过的断言(如此AreEqual处)都会继续运行.所以第一次测试通过,然后最后一行标记为不确定.


Chr*_*isF 8

即使你已经删除了Assert.Inconclusive你仍然可能有问题.

您正在测试两个浮点数的相等性,并且通常使用计算值,您将永远不会得到它们完全相同.您需要检查实际值是否在预期值的可接受范围内:

Math.Abs(actual - expected) < 0.00001;
Run Code Online (Sandbox Code Playgroud)

例如.

Assert.AreEqual(expected, actual);在这种情况下工作,因为你分配相同的值,这两个变量.