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.

Était-ce utile?

La solution

Même si elle a fait la compilation, vous comparez essentiellement cout avec lui-même ...

Essayez d'écrire à deux std::stringstreams 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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top