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

Why can't I use CppUnitLite test CHECK_DOUBLES_EQUAL

我是一名正在学习 C++ 的新手程序员 class。

作业是使用 stringstream 编写一个 double,然后使用 CppUnitLite 中的一个宏检查它。我想在我的写操作中使用 CHECK_DOUBLES_EQUAL 检查双精度值,但 VS 中的智能感知说它不会工作。在下面的示例中,我保留了有效的内容,一个简单的 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);
}

问题在于,在您的写入操作中,您并没有尝试与双精度数进行比较:您正在尝试与 STRING 进行比较。 C++ 是一种静态类型语言,不会将字符串与双精度数进行比较。

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