c ++枚举作为参数

时间:2015-02-11 18:18:08

标签: c++ enums googletest

帮助这是我第一次问这个问题,请温柔地对待我

假设我有一个枚举

typedef enum Fruits  
{  
    Apple = 1,  
    Banana,  
    Cat  
};

并且有一个功能

const char* printSomething(const Fruits myFruityFruit)  
{  
    switch (myFruityFruit)  
    {  
        case Apple:
            return "This is Apple!";  
        case Banana:  
            return "This is Banana!";  
        case Cat:  
            return "This is Cat ... ?";  
        default:  
            std::stringstream ss;  
            ss << "Unknown value: " << myFruityFruit;  
            auto temp = ss.str();
            return temp.c_str(); 
    }  
}

和一个看起来像这样的测试用例

TEST(myTest, myFruityTest)  
{  
    ASSERT_EQ("This is Apple!", printSomething(Apple));  
    ASSERT_EQ("This is Banana!", printSomething(Banana));  
    ASSERT_EQ("This is Cat ... ?", printSomething(Cat));  
    Fruits unknownFruit = static_cast<Fruits>(-1);  
    std::stringstream ss;  
    ss << "Unknown value: " << unknownFruit;  
    auto temp = ss.str();  
    ASSERT_EQ(temp.c_str(), printSomething(unknownFruit));  
}

最后ASSERT_EQ总是失败,我想看看myFruit的{​​{1}}的价值是多少defaultswitch case

我在

中假设
ASSERT_EQ(temp.c_str(), printSomething(unknownFruit));

它看起来像这样

ASSERT_EQ("Unknown value: -1", printSomething(-1));

但是Fruits没有-1,所以myFruityFruit将是null?这就是为什么最后一个ASSERT_EQ失败了?

在这种情况下究竟发生了什么?我能做些什么来让它通过?

此外,我正在尝试避免任何valgrind错误,如内存泄漏或其他。

0 个答案:

没有答案