为什么我不能使用CppUnitLite测试CHECK_DOUBLES_EQUAL

时间:2015-02-09 17:09:00

标签: c++ cppunit

我是一名参加c ++课程的新手程序员。

赋值是使用stringstream写一个double,然后使用CppUnitLite中的一个宏来检查它。我想使用CHECK_DOUBLES_EQUAL检查我的写操作中的double,但是VS中的intellisense说它不会'工作。在下面的示例中,我离开了什么工作,一个简单的CHECK_EQUAL。这不够好。我需要使用CHECK_DOUBLES_EQUAL作为浮点。

我已经尝试过CHECK_DOUBLES_EQUAL(dvalue,svalue,0.1),但这不会奏效。我也试过使用预期的实际值,但这也不起作用。

CHECK_DOUBLES_EQUAL适用于读取操作(第二个示例),但我无法在第一个示例中使用它。

这是为什么?我做错了什么?

TEST(writeDouble, stringStream)
{
    std::stringstream sValue;
    double dvalue =34.9;
    sValue << dvalue;
    if (!sValue)
    {
        CHECK_FAIL("conversion failed");
    }
    CHECK_EQUAL("34.9", sValue.str());  
}

TEST(readDouble, stringStream)
{
    std::stringstream sValue("34.9");
    double dvalue;
    sValue >> dvalue;
    if (!sValue)
    {
        CHECK_FAIL("conversion failed");
    }
    CHECK_DOUBLES_EQUAL(34.9, dvalue, 0.1);
}

1 个答案:

答案 0 :(得分:1)

问题是在你的写操作中,你不是要与双重进行比较:你试图与STRING进行比较。 C ++是一种静态类型语言,不会将字符串与double进行比较。

您与CHECK_EQUAL("34.9", sValue.str());一起使用的代码似乎是用于确保stringstream正确解释输入double值的正确代码。