Как я могу сравнить два объекта ostream в C ++ для равенства?
-
29-09-2019 - |
Вопрос
Я перегрузил левый оператор смены в своем классе, и выходной сигнал работает нормально, например, когда у меня есть линия, в которой говорится, что 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::stringstream
S, извлечение их строковых значений и сравнение их.
Если вам также необходимо проверить флаги -остроки, определите функцию сравнения и используйте TS_ASSERT_RELATION
.