Mas*_*EET 0 c++ operator-overloading stringstream googletest c++11
我operator<<像这样重载:
std::ostream& operator<<(std::ostream& os, SomeClass C){ 
//SomeClass is the class to be represented with operator overloading
os << "{ ";
os << C.getPropertyA() << " ";
os << C.getPropertyB() << " }";
//getPropertyA(), getPropertyB():functions of 'SomeClass' that return std::string
return os;
}
Run Code Online (Sandbox Code Playgroud)
现在我正在使用googletest来测试这样的operator<<重载:
SomeClass C1;
SomeClass C2;
.
.
std::stringstream ss;
std::string str;
//First test
ss << C1;
std::getline(ss, str);
EXPECT_EQ("<some expected value>", str); // googletest test
//Second test
ss.str("");ss.clear(); //Mandatory if 'ss' need to be reused
ss << C2;
std::getline(ss, str);
EXPECT_EQ("<some expected value>", str); // googletest test
.
.
//Some more use 'ss' follows
Run Code Online (Sandbox Code Playgroud)
现在问题是每次我添加一个我需要ss.str("");ss.clear();在测试之前添加的新测试,显然是为了清空流并清除错误状态.这两个std::stringstream函数的重复调用让我觉得我做错了.
因此我主要需要帮助:
std::stringstream变量's'而不再ss.str("");ss.clear();一次调用ORoperator<<使用googletest实现超载测试的最佳替代方案.您不需要getline来自字符串流,因为您可以直接访问底层存储.更简单的方法是stringstream为每个测试创建新的:
//First test
{
    SomeClass C1;
    .
    std::stringstream ss;
    ss << C1;
    EXPECT_EQ("<some expected value>", ss.str()); // googletest test
}
//Second test
{
    SomeClass C2;
    .
    std::stringstream ss;
    ss << C2;
    EXPECT_EQ("<some expected value>", ss.str()); // googletest test
}
Run Code Online (Sandbox Code Playgroud)
        |   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           375 次  |  
        
|   最近记录:  |