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

Why can't I use CppUnitLite test CHECK_DOUBLES_EQUAL

本文关键字:CHECK DOUBLES EQUAL 测试 CppUnitLite 不能 为什么      更新时间:2023-10-16

我是一个学习c++类的新手程序员。

任务是使用字符串流编写双精度,然后使用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);
}

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

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