Comment puis-je comparer deux objets ostream en C ++ pour l'égalité?
-
29-09-2019 - |
Question
Je surcharge l'opérateur de décalage vers la gauche dans ma classe et la sortie fonctionne très bien, donc par exemple quand j'ai une ligne qui dit Cout << obj; Je vais sortir les champs séparés par une virgule.
ostream& operator<<(ostream& output, const MyClass& obj)
{
output << obj.field1 << ", " << obj.field2;
return output;
}
Je veux écrire un test pour cette opération, mais je ne sais pas comment comparer le résultat retourné avec le résultat attendu dans cxxtest. J'ai essayé ce qui suit, mais ça n'a pas marché:
TS_ASSERT_EQUALS(cout << "1, 50.0", cout << obj);
Suis-je censé utiliser une opération de cxxtest différent ou changer le mécanisme passant paramètre TS_ASSERT_EQUALS?
Notez que quand je sortie les lignes, je reçois les mêmes résultats suivants:
cout << obj;
cout << "1, 50.0";
Note: je reçois un tas d'erreurs compilateur lorsque je tente de compiler le programme, car ne TS_ASSERT_EQUALS.
La solution
Même si elle a fait la compilation, vous comparez essentiellement cout
avec lui-même ...
Essayez d'écrire à deux std::stringstream
s distinctes, extraire leurs valeurs de chaîne, et en les comparant.
Si vous avez aussi besoin de tester drapeaux ostream, définir une TS_ASSERT_RELATION
fonction de comparaison et de l'utilisation.