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

StackOverflow https://stackoverflow.com/questions/4109441

Вопрос

Я перегрузил левый оператор смены в своем классе, и выходной сигнал работает нормально, например, когда у меня есть линия, в которой говорится, что 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_ECALS не удается.

Это было полезно?

Решение

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top