How to test input and output overloaded operator in C++ Gtest

一笑奈何 提交于 2019-12-04 07:11:05

问题


I am using following example from here

Consider I have following class

#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;            
  }
};

I am using Gtest to test this class.

But I could not find better way to test it.

I can use the macro provided in gtest ASSERT_NO_THROW, but it will not validate the values. Is there any way I can use EXPECT_EQ instead?

Thanks


回答1:


Is there any way I can use EXPECT_EQ instead?

You can use a stringstream to print the results of operator<< to a string, then compare the string.

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() );
}

Input test would be similar, just use std::istringtream instead.




回答2:


What do you want to test about the operators?

  • That the stream is in a good state after writing to or reading from it.
    You can check for that.

  • That the output operator writes a particular string for a particular distance.
    You can do this by writing into a std::ostringstream and comparing the result of calling its str() member with your expectations.

  • That the input iterator reads a particular distance from a particular string.
    You can do this employing a std::istringstream initialized with the string, comparing the distance read from it with what you expect.

  • That the class eats its own dog food.
    Use a std::stringstream to write into, then read from it, and compare what you read with what you wrote.
    Note: This will currently fail.



来源:https://stackoverflow.com/questions/31815230/how-to-test-input-and-output-overloaded-operator-in-c-gtest

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!