我正在使用here
中的以下示例考虑我有以下课程
#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;
}
};
我正在使用Gtest来测试这门课程。
但我找不到更好的方法来测试它。
我可以使用gtest ASSERT_NO_THROW
中提供的宏,但它不会验证值。
我有什么方法可以使用EXPECT_EQ
代替吗?
谢谢
答案 0 :(得分:3)
我有什么方法可以使用EXPECT_EQ吗?
您可以使用stringstream
将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() );
}
输入测试类似,只需使用std::istringtream
。
答案 1 :(得分:2)
您想对运营商进行测试?
写入或读取后,流处于良好状态。
你可以检查一下。
输出操作符为特定距离写入特定字符串。
您可以写入std::ostringstream
并将调用其str()
成员的结果与您的期望进行比较来完成此操作。
输入迭代器读取特定字符串的特定距离。
你可以使用用字符串初始化的std::istringstream
来比较从它读取的距离和你期望的距离。
班上吃自己的狗粮。
使用std::stringstream
写入,然后从中读取,并将您阅读的内容与您所写的内容进行比较
注意:这将失败。