如何比较C ++中的两个ostream对象是否相等?

时间:2010-11-05 19:44:37

标签: operator-overloading ostream cxxtest

我在我的班级中重载了左移位运算符,输出工作正常,所以例如当我有一行说cout<< OBJ;我将输出以逗号分隔的字段。

 ostream& operator<<(ostream& output, const MyClass& obj)
 {
     output << obj.field1 << ", " << obj.field2;
     return output;
 }

我想为此操作编写测试用例,但我不知道如何将返回的结果与cxxtest中的预期结果进行比较。我尝试了以下方法,但它不起作用:

 TS_ASSERT_EQUALS(cout << "1, 50.0", cout << obj);

我是否应该使用不同的cxxtest操作或更改TS_ASSERT_EQUALS中的参数传递机制?

请注意,当我输出以下行时,我得到相同的结果:

 cout << obj;
 cout << "1, 50.0";

注意:当我尝试编译程序时,由于TS_ASSERT_EQUALS失败,我收到了一堆编译器错误。

1 个答案:

答案 0 :(得分:2)

即使它确实编译了,你基本上也在比较cout与它自己...

尝试写两个不同的std::stringstream,提取它们的字符串值,然后比较它们。

如果您还需要测试ostream标志,请定义比较函数并使用TS_ASSERT_RELATION