如何在 C++ Gtest 中测试输入和输出重载运算符

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吗?

谢谢

Sla*_*ica 5

有什么办法可以使用 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即可。