Domanda

I sovraccarica l'operatore spostamento a sinistra nella mia classe e l'uscita funziona bene, così per esempio quando ho una linea che dice cout << obj; Lo farò in uscita i campi separati da una virgola.

 ostream& operator<<(ostream& output, const MyClass& obj)
 {
     output << obj.field1 << ", " << obj.field2;
     return output;
 }

Voglio scrivere un banco di prova per questa operazione, ma non ho idea di come confrontare il risultato restituito con il risultato previsto in cxxtest. Ho provato quanto segue, ma non ha funzionato:

 TS_ASSERT_EQUALS(cout << "1, 50.0", cout << obj);

dovrei utilizzare un'operazione cxxtest diverso o modificare il parametro che passa meccanismo TS_ASSERT_EQUALS?

Si noti che quando ho uscita le seguenti linee, ottengo gli stessi risultati:

 cout << obj;
 cout << "1, 50.0";

Nota: ho un sacco di errori di compilazione quando si tenta di compilare il programma perché TS_ASSERT_EQUALS fallisce.

È stato utile?

Soluzione

Anche se lo ha fatto in fase di compilazione, si sta fondamentalmente confrontando cout con se stessa ...

Provare a scrivere a due distinte std::stringstreams, estraendo i loro valori di stringa, e confrontando questi.

Se hai bisogno anche di testare le bandiere ostream, definire una funzione di confronto e l'uso TS_ASSERT_RELATION.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top