Frage

überlastete ich den linken Shift-Operator in meiner Klasse und der Ausgang funktioniert gut, so zum Beispiel, wenn ich eine Linie habe, die cout << obj sagt; Ich werde geben die durch ein Komma getrennt Felder.

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

Ich mag einen Testfall für diese Operation schreiben, aber ich habe keine Ahnung, wie in CxxTest das zurückgegebene Ergebnis mit dem erwarteten Ergebnis zu vergleichen. Ich habe versucht, die folgenden, aber es hat nicht funktioniert:

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

Soll ich einen anderen CxxTest Betrieb verwenden oder die Parameter ändern Mechanismus vorbei in TS_ASSERT_EQUALS?

Beachten Sie, dass, wenn ich Ausgang die folgenden Zeilen, bekomme ich die gleichen Ergebnisse:

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

Hinweis: Ich habe eine Reihe von Compiler-Fehler, wenn ich das Programm zu kompilieren versuchen, weil TS_ASSERT_EQUALS ausfällt.

War es hilfreich?

Lösung

Auch wenn es die Kompilierung hat, sind Sie im Grunde Vergleich cout mit sich selbst ...

Versuchen Sie, zwei verschiedene std::stringstreams schreiben, ihre String-Werte zu extrahieren und diese zu vergleichen.

Wenn Sie auch zu Test Ostream Flags müssen, definieren Sie eine Vergleichsfunktion und Verwendung TS_ASSERT_RELATION.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top