Как я могу сравнить два объекта ostream в C ++ на равенство? - PullRequest
4 голосов
/ 05 ноября 2010

Я перегрузил левый оператор сдвига в своем классе, и вывод работает нормально, например, когда у меня есть строка с надписью cout << obj; Я выведу поля, разделенные запятой. </p>

 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 Ответ

2 голосов
/ 05 ноября 2010

Даже если он скомпилирован, вы просто сравниваете cout с самим собой ...

Попробуйте записать в два разных std::stringstream s, извлечь их строковые значения и сравнить их.

Если вам также необходимо проверить флаги ostream, определите функцию сравнения и используйте TS_ASSERT_RELATION.

...