Roh*_*are 0 c++ operator-overloading googletest
我正在使用这里的以下示例
考虑我有以下课程
#include <iostream>
class Distance {
private:
int feet;
int inches;
public:
Distance() : feet(), inches() {}
Distance(int f, int i) : feet(f), inches(i) {}
friend std::ostream &operator<<( std::ostream &output, const Distance &D )
{
output << "F : " << D.feet << " I : " << D.inches;
return output;
}
friend std::istream &operator>>( std::istream &input, Distance &D )
{
input >> D.feet >> D.inches;
return input;
}
};
Run Code Online (Sandbox Code Playgroud)
我正在使用 Gtest 来测试这个类。
但我找不到更好的方法来测试它。
我可以使用 gtest 中提供的宏ASSERT_NO_THROW,但它不会验证这些值。有什么办法可以代替EXPECT_EQ吗?
谢谢
有什么办法可以使用 EXPECT_EQ 代替吗?
您可以使用 astringstream将结果打印operator<<到字符串,然后比较该字符串。
https://en.cppreference.com/w/cpp/io/basic_stringstream
TEST( Distance, Output )
{
std::ostringstream out;
Distance d;
out << d;
EXPECT_EQ( "F:0 I:0", out.str() );
}
Run Code Online (Sandbox Code Playgroud)
输入测试类似,只需使用std::istringtream即可。